如何从JButton外部调用JTable操作?

时间:2013-07-11 09:03:58

标签: java swing jtable jbutton copy-paste

我有JTable TransferHandler,可以通过热键 DnD 进行 copy-cut-paste 操作。我在JButtons之外有3 JTable copy-cut-paste ),它应该调用JTable's TransferHandler上的类似操作(例如canImport()等等。)

我该怎么做?

2 个答案:

答案 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");
        }
    });
}