我有JTable
TransferHandler
,可以通过热键或 DnD 进行 copy-cut-paste 操作。我在JButtons
之外有3 JTable
( copy-cut-paste ),它应该调用JTable's TransferHandler
上的类似操作(例如canImport()
等等。)
我该怎么做?
答案 0 :(得分:2)
基本上与recent question/answer中非常相似的方法:在其actionMap中找到表的复制操作,将其包装到委托给原始文件的自定义操作中,并使用按钮中的自定义操作:
table.setDragEnabled(true);
final Action copy = table.getActionMap().get("copy");
Action copyWithButton = new AbstractAction("copy") {
@Override
public void actionPerformed(ActionEvent e) {
copy.actionPerformed(
new ActionEvent(table, e.getID(), e.getActionCommand()));
}
};
frame.add(new JScrollPane(table));
frame.add(new JButton(copyWithButton), BorderLayout.NORTH);
frame.add(new JScrollPane(new JTextArea(5, 20)), BorderLayout.SOUTH);
答案 1 :(得分:2)
谢谢大家,但在等待答案时我自己找到了答案:
private void onAction(String actionStr) {
Action action = table.getActionMap().get(actionStr);
ActionEvent newAE = new ActionEvent(table, ActionEvent.ACTION_PERFOMED, actionStr);
action.actionPerfomed(newAE);
}
private void decorateButtons() {
copyButton.addActionListener(new ActionListener() {
public void actionPerfomed(ActionEvent ae) {
onAction("copy");
}
});
cutButton.addActionListener(new ActionListener() {
public void actionPerfomed(ActionEvent ae) {
onAction("cut");
}
});
pasteButton.addActionListener(new ActionListener() {
public void actionPerfomed(ActionEvent ae) {
onAction("paste");
}
});
}