1

Java アプリケーションを開発しています。jTable で CTRL+C を押すと、クリップボードを取得して Excel に貼り付けることができます。同じことをするボタンを実装したいと思います。これを達成するために使用できる関数、リスナーなどを取得するにはどうすればよいですか?

PS: 他の質問を見てみましたが、私が欲しいものを探しているようには見えません。

4

2 に答える 2

4

テーブルのコピー アクションのキーは次のとおりです"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);
于 2013-01-16T17:18:41.097 に答える
3

しかし、アクションをリサイクルする便利な方法がわかりません:

アクションのソースはテーブルではなくボタンであるため、そのようにアクションを使用することはできません。

一般的な解決策については、アクション マップ アクションを参照してください。提供されたクラスを使用すると、コードは次のようになります。

Action copyAction = new ActionMapAction("Copy Table", table, "copy");
JButton copyButton = new JButton(copyAction);
于 2013-03-08T04:04:56.557 に答える