我嘗試向JFormattedTextField添加「標準」剪切/複製/粘貼彈出菜單。Swing:JPopupMenu在JFormattedTextField上彈出時取消選擇文本
粘貼按預期工作,但剪切和複製 - 不。問題是在彈出菜單JFormattedTextField期間丟失了它的選擇。任何想法爲什麼發生這種情況,以及如何解決它?
我的代碼:
public class SwingTest {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(new TestPanel());
f.pack();
f.setVisible(true);
}
public static class TestPanel extends JPanel {
public TestPanel(){
JFormattedTextField field = new JFormattedTextField(" ");
JFormattedTextField component = field;
final JPopupMenu menu = new JPopupMenu();
JMenuItem item;
item = new JMenuItem(new DefaultEditorKit.CopyAction());
item.setText("Copy");
item.setEnabled(component.getSelectionStart() != component.getSelectionEnd());
menu.add(item);
item = new JMenuItem(new DefaultEditorKit.CutAction());
item.setText("Cut");
item.setEnabled(component.isEditable() && component.getSelectionStart() != component.getSelectionEnd());
menu.add(item);
item = new JMenuItem(new DefaultEditorKit.PasteAction());
item.setText("Paste");
item.setEnabled(component.isEditable());
menu.add(item);
field.setComponentPopupMenu(menu);
add(field, java.awt.BorderLayout.CENTER);
}
}
}
UPDATE:快速調查顯示,上面的代碼工作在不同的OS X(我的操作系統)和Windows(大多數評論者OS)。我正在尋找安全且跨平臺的方式來顯示彈出式窗口。
哪裏代碼的行動,被執行? – Blip
旁註.'border layout'不是jpanel的默認佈局管理器。你必須爲'TestPanel'設置佈局到邊界。 –
似乎對我來說工作正常,但我不會禁用任何菜單項之前適用於該領域;) – MadProgrammer