下記のプログラムで実装できない所がありますので補える方は教えてください
1.チェックボックスで削除を選択した、行番号をコンソールに表示したい。
2.コンボボックスで選択されたコンボボックスの文字列と選択されたコンボボックス
のインデックス番号が知りたい
以上です。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.Class;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableModel;
public class JTableSample1 implements ActionListener{
JComboBox comboBox;
public static void main(String[] args) {
new JTableSample1().init();
}
public void init() {
String[] title = { "削除", "String", "Integer", "JComboBox" };
String prompt = "選んで下さい";
Object[][] records = {
{ Boolean.FALSE, "Rachel Green", new Integer(1970), prompt },
{ Boolean.FALSE, "Monica Geller", new Integer(1969), prompt },
{ Boolean.FALSE, "Phoebe Buffay", new Integer(1967), prompt },
{ Boolean.FALSE, "Joey Tribbiani", new Integer(1967), prompt },
{ Boolean.FALSE, "Chandler Bing", new Integer(1968), prompt },
{ Boolean.FALSE, "Ross Geller", new Integer(1967), prompt } };
TableModel model = new DefaultTableModel(records, title) {
public Class<?> getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
};
JTable table = new JTable(model);
comboBox = new JComboBox();
comboBox.addItem("ごはん食べてる");
comboBox.addItem("テレビみてる");
comboBox.addItem("仕事してる");
comboBox.addItem("寝てる");
TableCellEditor editor = new DefaultCellEditor(comboBox);
table.getColumnModel().getColumn(3).setCellEditor(editor);
JFrame frame = new JFrame("Joey Table");
frame.getContentPane().add(new JScrollPane(table));
frame.setSize(640, 240);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
System.out.println("選択されたコンボボックス:"+(String)comboBox.getSelectedItem());
System.out.println("選択されたコンボボックスのインデックス番号:"+comboBox.getSelectedIndex());
}
}
No.1ベストアンサー
- 回答日時:
この場合は、UIによる操作でTableModelオブジェクトが変更される(チェックボックスの選択や解除等)ので、ActionListenerではなくTableModelListenerを使用します。
TableModelListenerを実装した形に修正したソースを張っておきます。
簡単な修正しかしていませんが、行番号やインデックス番号の取り方はすぐに分かると思います。
----------
import java.lang.Class;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableModel;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
// ActionListenerではなく、TableModelListenerを実装する
public class JTableSample1 implements TableModelListener {
JComboBox comboBox;
TableModel model; // インスタンス変数にする
public static void main(String[] args) {
new JTableSample1().init();
}
public void init() {
String[] title = { "削除", "String", "Integer", "JComboBox" };
String prompt = "選んで下さい";
Object[][] records = {
{ Boolean.FALSE, "Rachel Green", new Integer(1970), prompt },
{ Boolean.FALSE, "Monica Geller", new Integer(1969), prompt },
{ Boolean.FALSE, "Phoebe Buffay", new Integer(1967), prompt },
{ Boolean.FALSE, "Joey Tribbiani", new Integer(1967), prompt },
{ Boolean.FALSE, "Chandler Bing", new Integer(1968), prompt },
{ Boolean.FALSE, "Ross Geller", new Integer(1967), prompt } };
model = new DefaultTableModel(records, title) {
public Class<?> getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
};
JTable table = new JTable(model);
model.addTableModelListener(this); // 追加
comboBox = new JComboBox();
comboBox.addItem("ごはん食べてる");
comboBox.addItem("テレビみてる");
comboBox.addItem("仕事してる");
comboBox.addItem("寝てる");
TableCellEditor editor = new DefaultCellEditor(comboBox);
table.getColumnModel().getColumn(3).setCellEditor(editor);
JFrame frame = new JFrame("Joey Table");
frame.getContentPane().add(new JScrollPane(table));
frame.setSize(640, 240);
frame.setVisible(true);
}
// TableModelListenerのメソッドを実装
public void tableChanged(TableModelEvent e) {
System.out.println(model.getValueAt(e.getFirstRow(), e.getColumn()));
}
}
ご回答ありがとうございます。x_jouet_xさんのプログラムでtableChangedメソッドの中身を
if(e.getColumn()==0){
int val = e.getFirstRow()+1;
System.out.println("チェックボックスの"+val+"行目がクリックされて"+model.getValueAt(e.getFirstRow(), e.getColumn())+"になりました");
}
if(e.getColumn()==3){
int val = e.getFirstRow()+1;
System.out.println("コンボボックスの"+val+"行目がクリックされて"+model.getValueAt(e.getFirstRow(), e.getColumn())+"になりました");
}を追加しました。
この方法でいいのでしょうか?
また、選択されたコンボボックスのインデックス番号が取得できないのですが教えていただけないでしょうか。
No.2
- 回答日時:
#1で回答した者です。
やっぱりtableChanged()メソッド内の実装が分からないといけないので、ご希望にそった形でtableChanged()を実装したものを下記に張り付けておきます。
----------
// TableModelListenerのメソッドを実装
public void tableChanged(TableModelEvent e) {
Object obj = model.getValueAt(e.getFirstRow(), e.getColumn());
// 「削除」チェックボックス選択/解除時
if (e.getColumn() == 0) {
if ((Boolean)obj) {
System.out.println("チェックボックス選択: " + e.getFirstRow());
} else {
System.out.println("チェックボックス解除: " + e.getFirstRow());
}
}
// コンボボックス変更時
if (e.getColumn() == 3) {
System.out.println("選択されたコンボボックス: " + comboBox.getSelectedItem());
System.out.println("選択されたコンボボックスのインデックス番号: " + comboBox.getSelectedIndex());
}
}
----------
あともう1点ですが、現在のソースだとフレームを閉じてもJavaのプロセスが終了しないのではありませんか?
意図的にそうしているなら問題ありませんが…。
一応、JFrameオブジェクトに対して
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
をしておいた方がいいと思います。
度々ご回答いただきありがとうございました。
なんとかチェックボックスとコンボボックスのデータが取得できる
ようになりました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java java final 1 2022/06/10 22:49
- Java Java 配列<選挙> 4 2023/07/31 15:07
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- C言語・C++・C# クラスのメンバ変数を基準に並べ替えをしたい 5 2022/12/25 17:40
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「例外 *** は対応する try 文...
-
<forEach> 内で供給された "ite...
-
eclipseに記述したjavaファイル...
-
文字列を数式に
-
Selenium IDEでexportしたコー...
-
importとextendsの用い方の違い...
-
Javaを使ってデジタル時計を作...
-
Javaで常駐するソフトを作って...
-
シャットダウンフックが呼ばれない
-
フレームの×ボタンを押しても閉...
-
createImage()を使い コンパイル
-
setAttribute(String, int)は適...
-
importするには java.io.*; imp...
-
生年月日と今日の日付から年齢...
-
javaで質問です。 文字列2023/2...
-
C言語のポインターに関する警告
-
ループ処理の際、最後だけ","を...
-
[JAVA]try 内の変数を外で!?
-
System.err. printlnとSystem.o...
-
JSPやサーブレットでSystem.out...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
「例外 *** は対応する try 文...
-
干支の計算で。。。
-
Selenium IDEでexportしたコー...
-
Javaを使ってデジタル時計を作...
-
ColabでのPytorchのエラー
-
importするには java.io.*; imp...
-
生年月日と今日の日付から年齢...
-
ファイル名を動的に生成したい
-
文字列を数式に
-
<forEach> 内で供給された "ite...
-
Javaからストアド実行(配列項目)
-
シャットダウンフックが呼ばれない
-
ActionForm form にnullが入っ...
-
setAttribute(String, int)は適...
-
(急募)JavaカレンダーをGUI可に...
-
文字サイズが可変のラベル
-
python OpenPyXLを使って出力結...
-
Java での グローバルIP取得
-
データの外挿について
おすすめ情報