JTableに行が選択されているかどうかに応じて、ボタンを有効/無効にしようとしています。JFormDesignerでListSelectionListenerを実装する方法は?
このOracle tutorialに記載されているように、JTableのSelectionModelをリッスンしてListSelectionListenerにする必要があると思います。
JFormDesigner 5ではどうすればよいですか?
私のJButtonに次のコードを追加する必要があるようですが、JFormDesignerでこれを行う方法はわかりません。 JFormDesignerがactionPerformedのハンドラを追加すると、私の経験では
// 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はJFrameの上のメソッドを作成しました。しかし、Swing & OOPの私の理解は、ListSelectionListenerのコードはリスニングウィジェット自体(私の場合はJButton)の中にあるべきだと言います。
私は使用しています:JFormDesigner 5.0.0.1、IntelliJ 10.5、Java 1.6.0_24、Mac OS X 10.6.7。
-------- -----------は私の質問に答えるための「うなぎのホバークラフトのフル」へ
感謝を解決しました。
解決策:JFrameにListSelectionListenerを作成するコードを追加します。これにより、JFormDesignerツールを妨げずにジョブが完了します。
"Hovercraft Full Of Eels"のコード例を拡張して、インタラクティブにしました。ボタンに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();
}
});
}
}
1+ニース適応。 :) –