JTableで行が選択されているかどうかに応じて、それ自体を有効/無効にするボタンを取得しようとしています。
したがって、このOracleチュートリアルで説明されているように、ボタンをListSelectionListenerにして、JTableのSelectionModelをリッスンする必要があると思います。
JFormDesigner 5でこれを行うにはどうすればよいですか?
次のコードをJButtonに追加する必要があるようですが、JFormDesignerで追加する方法がわかりません。
// Implementing this method to be a ListSelectionListener.
public void valueChanged(ListSelectionEvent e) {
ListSelectionModel lsm = (ListSelectionModel)e.getSource();
boolean anyRowsSelected = !(lsm.isSelectionEmpty());
this.setEnabled( anyRowsSelected );
}
JFormDesignerがactionPerformedハンドラーを追加した私の経験では、JFormDesignerはJFrameにメソッドを作成しました。しかし、Swing&OOPについての私の理解では、ListSelectionListenerのコードはリスニングウィジェット自体(私の場合はJButton)内にある必要があります。
私が使用しているのは、JFormDesigner 5.0.0.1、IntelliJ 10.5、Java 1.6.0_24、Mac OSX10.6.7です。
--------解決済み-----------
私の質問に答えてくれた「HovercraftFullOfEels」に感謝します。
解決策:JFrameにコードを追加して、ListSelectionListenerを作成します。これにより、JFormDesignerツールに干渉することなく作業を完了できます。
「HovercraftFullOfEels」のサンプルコードを拡張して、よりインタラクティブにしました。ユーザーの選択をクリアするために、ボタンにActionListenerを追加しました。これで、ユーザーはボタンが有効と無効の間で切り替わるのを見ることができます。
私のバージョンは微妙なバグを示しています。テーブルの選択がクリアされると、選択されたセルが黒くなります。理由はわかりません。しかし、それはこのStackOverflowの質問の範囲外です。そのバグに関係なく、このコードはこの質問の良いデモです。
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
public class TableAndButton extends JPanel {
private static final String[] COLUMN_NAMES = {"Mon", "Tues", "Wed", "Thurs", "Fri"};
private JButton button = new JButton("Clear user's selection");
private DefaultTableModel model = new DefaultTableModel(COLUMN_NAMES, 10);
private JTable table = new JTable(model);
public TableAndButton() {
JPanel btnPanel = new JPanel();
btnPanel.add(button);
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
ListSelectionModel lsm = (ListSelectionModel)e.getSource();
boolean anyRowSelected = !(lsm.isSelectionEmpty());
button.setEnabled(anyRowSelected);
}
});
button.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
table.getSelectionModel().clearSelection();
}
});
button.setEnabled(false);
setLayout(new BorderLayout());
add(new JScrollPane(table), BorderLayout.CENTER);
add(btnPanel, BorderLayout.PAGE_END);
}
private static void createAndShowUI() {
JFrame frame = new JFrame("TableAndButton");
frame.getContentPane().add(new TableAndButton());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}