私はJTable
カスタムレンダラーを持っています。のアイテムJTable
がクリックされると、モデルに影響を与える特定の一連のアクションを実行します。これを実装するには、次の 2 つの選択肢があります。
ListSelectionListenerJTable
:行がクリックされたとき
に起動するリスナーを全体に追加します。次に、アクションを実行します。
- 利点: 行の任意の部分を選択できます (私の場合は必要ありません)。これはおそらく、Swingがイベントを発生させることを意図した方法です。
JTable
- 短所: これを処理してコードを再現するには、カスタム クラスを作成する必要があります。
例:
class Selector implements ListSelectionListener {
@Override
public void valueChanged(ListSelectionEvent event) {
// ... write the action code here
}
}
JButton & Action
: をレンダリングし、JButton
それに を追加Action
しJButton
ます。
- 利点: を再利用できます。
Action
変更するとAction
、それを使用するすべてのインスタンスが更新されます。 - 短所: ロジックをレンダリング コードに移動します。
例:
class Renderer implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int col) {
JButton btn = new JButton(value.toString());
btn.setAction(new SpecificAction());
return btn;
}
}
2 番目の解決策を使用すると、天から火の雨が降りますか?
どちらも同じように実行可能ですか?
Action
内で sを使用する方法はありListSelectionListener
ますか?