我开发一个Java应用程序,当我按CTRL + C在一个JTable,我可以得到剪贴板,并粘贴在Excel中。 我想实现一个按钮,做同样的事情。 我怎样才能获得的功能,监听器,不管它是什么,我可以用它来实现这一目标?
PS:我试图寻找其他的问题,但没有一个似乎是在寻找我想要的东西。
我开发一个Java应用程序,当我按CTRL + C在一个JTable,我可以得到剪贴板,并粘贴在Excel中。 我想实现一个按钮,做同样的事情。 我怎样才能获得的功能,监听器,不管它是什么,我可以用它来实现这一目标?
PS:我试图寻找其他的问题,但没有一个似乎是在寻找我想要的东西。
该表的复制动作的关键在于"copy"
:
Action copyAction = table.getActionMap().get("copy");
但我看不到回收的有效方式Action
:
JButton button = new JButton(copyAction);
相反,只是表的当前选择导出到系统剪贴板。
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TableModel model = new DefaultTableModel(
new Object[][]{{"Some"}, {"More"}}, new Object[]{"Name"});
final JTable table = new JTable(model);
table.getSelectionModel().setSelectionInterval(0, 1);
f.add(table);
f.add(new JButton(new AbstractAction("Export") {
@Override
public void actionPerformed(ActionEvent e) {
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
table.getTransferHandler().exportToClipboard(
table, clipboard, TransferHandler.COPY);
Transferable contents = clipboard.getContents(null);
}
}), BorderLayout.SOUTH);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
附录:这种变化依赖于TableTransferable
。
final DefaultTableModel model = new DefaultTableModel(
new Object[][]{
{"A1", "A2", "A3", "A4", "A5"},
{"B1", "B2", "B3", "B4", "B5"},
{"C1", "C2", "C3", "C4", "C5"},
{"D1", "D2", "D3", "D4", "D5"},
{"E1", "E2", "E3", "E4", "E5"},
{"F1", "F2", "F3", "F4", "F5"}
},
new Object[]{"1", "2", "3", "4", "5"});
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JTable table = new JTable(model);
table.getSelectionModel().setSelectionInterval(0, 1);
f.add(table);
f.add(new JButton(new AbstractAction("Export") {
@Override
public void actionPerformed(ActionEvent e) {
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
cb.setContents(new TableTransferable(model), new ClipboardOwner() {
@Override
public void lostOwnership(Clipboard clipboard, Transferable contents) {
System.out.println("Clipboard lost!");
}
});
}
}), BorderLayout.SOUTH);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
但我没有看到回收行动的有效方法:
因为动作的来源是按钮不表,你不能使用这种方式操作。
见行动地图行动的一个通用的解决方案。 使用提供的类的代码如下:
Action copyAction = new ActionMapAction("Copy Table", table, "copy");
JButton copyButton = new JButton(copyAction);