Получить ключ от JTextArea
Все, что я хочу сделать, Если я нажимаю ‘{‘ этот ключ в JtextArea.automatically ‘}’, это также будет печать.
if(evt.KEY_PRESSED == '{') System.out.print("}");
это нормально?
- Обновление JLabel каждые X секунд из ArrayList - Java
- Может ли индикатор выполнения работать в classе за пределами основного?
- Java GIF анимация не перерисовывается правильно
- Правое нажатие на JButton
- JTable + Сортировка определенного поля
- Могу ли я добавить JRadioButton в JTable
- SwingWorker в другом методе SwingWorker
- Графический рендеринг в строке заголовка
- JMenu ActionListener
- Закрытие управляемой JOptionPane
- Как создать задержку в Swing
- Как имитировать буферизованное периферийное устройство с SwingWorker?
- Как я могу сделать анимацию Java Swing более гладкой
для прослушивания изменений в JTextComponent есть DocumentListener, если вам нужно контролировать введенные Char, поет, символы пробелов или слова (ов), которые вы должны реализовать DocumentFilter
уведомление для Chars, зарезервированное с помощью языка (языков) программирования, вы должны использовать двойные экраны,
\\(
вместо (
или
\\{
вместо {
иначе вы получите
Exception in thread "AWT-EventQueue-0" java.util.regex.PatternSyntaxException: Illegal repetition
например
import java.awt.*; import java.util.ArrayList; import java.util.List; import javax.swing.*; import javax.swing.event.*; import javax.swing.text.*; public class TextAreaTest extends JFrame { private static final long serialVersionUID = 1L; private JTextArea textArea; public TextAreaTest() { textArea = new JTextArea(); textArea.setPreferredSize(new Dimension(60, 32)); textArea.setOpaque(true); textArea.setLineWrap(true); textArea.setWrapStyleWord(true); ((AbstractDocument) textArea.getDocument()).setDocumentFilter(new DocumentFilter() { @Override public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { string = string.replaceAll("\\{", "\\{}"); super.insertString(fb, offset, string, attr); } @Override public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { text = text.replaceAll("\\{", "\\{}"); //TODO must do something here super.replace(fb, offset, length, text, attrs); } }); textArea.getDocument().addDocumentListener(new DocumentListener() { @Override public void changedUpdate(DocumentEvent e) { update(e); } @Override public void insertUpdate(DocumentEvent e) { update(e); } @Override public void removeUpdate(DocumentEvent e) { update(e); } private void update(DocumentEvent e) { List lines = getLines(textArea); String lastLine = lines.get(lines.size() - 1); int tabbedTextWidth = Utilities.getTabbedTextWidth(new Segment( lastLine.toCharArray(), 0, lastLine.length()), textArea.getFontMetrics(textArea.getFont()), 0, null, 0); int lineHeight = getLineHeight(textArea); if (lines.size() * lineHeight > textArea.getHeight() || tabbedTextWidth > textArea.getWidth()) { System.out.println("Too big! Should refuse the update!"); } } }); getContentPane().add(textArea); } private static List getLines(JTextArea textArea) { int lineHeight = getLineHeight(textArea); List list = new ArrayList (); for (int num = 0;; num++) { int i = textArea.viewToModel(new Point(0, num * lineHeight)); int j = textArea.viewToModel(new Point(0, (num + 1) * lineHeight)); if (i == 0 && j == 0) { continue; } if (textArea.getDocument().getLength() == i && i == j) { break; } String s = removeTrailingNewLine(textArea.getText().substring(i, j)); list.add(s); //System.out.println(i + " " + j + " = " + s); } return list; } private static int getLineHeight(JTextArea textArea) { return textArea.getFontMetrics(textArea.getFont()).getHeight(); } private static String removeTrailingNewLine(String s) { if (s.endsWith("\n")) { return s.substring(0, s.length() - 1); } else { return s; } } public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() { TextAreaTest test = new TextAreaTest(); test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); test.pack(); test.setVisible(true); } }); } }
Я думаю, это то, что вы ищете
if(evt.getID() == evt.KEY_PRESSED) { if(evt.getKeyChar() == '{') { System.out.print("}"); } }
Протестировано и работает