Публикация этого ответа:
Вы можете посмотреть на изменение функциональности в методах JTextComponent
s copy()
, paste()
и cut()
, чтобы изменить способ их работы для этого компонента.
Недостатком этого подхода является то, что если вы измените способ работы copy()
- пользователь никогда не получит ожидаемых результатов при попытке скопировать выборку из одного JTextField
.Способ решения этой проблемы - реализовать новую привязку клавиш для компонента.Вот пример, заменив кнопку «Копировать» на «Ctrl-G» KeyBinding.
public class Test {
public static JTextField text1 = new JTextField("This is the first text field");
public static JTextField text2 = new JTextField("This is the second text field");
public static void main(final String [] args)
{
final JFrame frame = new JFrame("Display Keyword Panel");
final JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
text1.setBorder(null);
text1.setOpaque(false);
text1.setEditable(false);
text2.setBorder(null);
text2.setOpaque(false);
text2.setEditable(false);
text1.getInputMap().put(KeyStroke.getKeyStroke('G', KeyEvent.CTRL_DOWN_MASK), "copyAll");
text1.getActionMap().put("copyAll", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
StringBuilder s = new StringBuilder();
s.append(text1.getText()).append("\n").append(text2.getText());
System.out.println(s.toString());
}
});
panel.add(text1);
panel.add(text2);
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(panel, BorderLayout.CENTER);
frame.setLocation(450, 400);
frame.pack();
frame.setVisible(true);
}
}