• 締切済み

JTableに貼り付けたJButton名の取得がうまくできません

JTableには、通常のセルの部分とボタンの部分があり、ボタンが選択された際にボタン名を取得したいのですが、セルの値を取得してしまいます。 ボタン名を取得するにはどうしたらよいのでしょうか。 DBからレコードを取得し、それを配列にいれています。 1~3個目は、そのままデータ用の配列に入れ、4~10のフィールドをコマンドボタンの名前としJTableに貼り付けています。 data[0][0] = 1 data[0][1] = 2 data[0][2] = 3 data[0][3] = New JButton(field1) data[0][4] = New JButton(field2) ・ ・ ・ 選択されたセルの値を取得すると「jswing....」となってしまいます。 どなたかご存知でしたら、教えて下さい。

  • Java
  • 回答数1
  • ありがとう数0

みんなの回答

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

TableCellRendererを使ってレンダリングを実装してください。

関連するQ&A

  • JTableのイベント取得方法

    お世話になります JTableにDBからの検索結果を表示させて、そのセルを編集したときに編集したセルに対してアップデート等の処理を行いたいのですが、セルが編集されたときのイベントを取得したいのですがうまくいきません。 具体的なソース等のアドバイスよろしくお願いします。 ---ソース--- TableEditListener lisner = new TableEditListener() tableModel = new AbstractTableModel(vecResult,clmName); tableModel.addTableModelListener(lisner); table = new JTable(tableModel); 内部クラス class TableEditListener implements javax.swing.event.TableModelListener{  public TableEditListener(){ } public void tableChanged(TableModelEvent e){ System.out.println("セルの編集をしました。"); } } 現在以上のようなソースになっています。 よろしくお願いします。

    • ベストアンサー
    • Java
  • SwingのJTableについて

    swingなのですが下記のプログラムで実現できない点があります。 1.isCellEditableメソッドを使ってセルを編集可能にしたのですが 編集した文字が消えてしまいます。 2.また、ボタンを配置してボタンを押下時に編集したセルの   行のデータをコンソールに表示したいのですがどうすればいいかわかりません。 3.画面レイアウトがsetLocation(x, y)した位置に表示されません。 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Vector; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; public class JTableSample4 implements ActionListener { static Vector<String>[] data = new Vector[3]; static JFrame frame; public static void main(String[] args) { frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(null); JPanel panel1 = new JPanel(); // セルのデータ作成 for (int i = 0; i < 3; i++) { data[i] = new Vector<String>(); } // data[0]に名前、data[1]に住所、data[2]に電話番号 data[0].addElement("鈴木一郎"); data[1].addElement("東京都"); data[2].addElement("xxxxxxxxxx"); data[0].addElement("佐藤花子"); data[1].addElement("千葉県"); data[2].addElement("yyyyyyyyyy"); data[0].addElement("田中浩二"); data[1].addElement("埼玉県"); data[2].addElement("zzzzzzzzzz"); data[0].addElement("小川伸介"); data[1].addElement("新潟県"); data[2].addElement("aaaaaaa"); data[0].addElement("佐藤和也"); data[1].addElement("群馬県"); data[2].addElement("bbbbbbb"); data[0].addElement("渡辺悟"); data[1].addElement("愛知県"); data[2].addElement("ccccccc"); data[0].addElement("橋本智也"); data[1].addElement("愛媛県"); data[2].addElement("ddddddd"); data[0].addElement("永井祐二"); data[1].addElement("栃木県"); data[2].addElement("eeeeeee"); data[0].addElement("細貝昭二"); data[1].addElement("福岡県"); data[2].addElement("fffffff"); data[0].addElement("堀野友光"); data[1].addElement("長野県"); data[2].addElement("gggggggg"); // テーブル作成 TableModel tableModel = new AbstractTableModel() { // 行数 public int getRowCount() { return 10; } // 列数 public int getColumnCount() { return 3; } // row行column列の値をセット public Object getValueAt(int row, int column) { return data[column].elementAt(row); } // タイトル部の値をセット public String getColumnName(int column) { switch (column) { case 0: return "名前"; case 1: return "住所"; case 2: return "電話番号"; } return ""; } /******************セルの編集 可/不可を操作するメソッド**********************/ public boolean isCellEditable(int rowIndex, int columnIndex) { /*0が1カラム目 1が2カラム目なのでこの場合電話番号だけ編集可*/ if (columnIndex == 0 || columnIndex ==1) { /*falseは編集不可*/ return false; } else /*trueは編集可*/ return true; } }; JLabel label = new JLabel("電話番号だけがセルを編集することができます"); label.setLocation(10, 10); label.setSize(300, 20); JButton button = new JButton("Click Me!"); button.setLocation(10, 400); button.setSize(20, 20); //button.addActionListener(); JTable table = new JTable(tableModel); JScrollPane scrollPane = new JScrollPane(table); scrollPane.setLocation(10, 40); scrollPane.setSize(750, 180); panel1.add(button); panel1.add(label); panel1.add(scrollPane); panel1.setBounds(10, 10, 800, 230); frame.add(panel1); frame.setSize(800, 600); frame.setVisible(true); } public void actionPerformed(ActionEvent e) { System.out.println("test"); } }

    • ベストアンサー
    • Java
  • SwingのJTableでのsort方法

    JTable上に以下のようなデータを表示してあります。     合計 国語 数学 英語 Aさん  250 100 80 70 Bさん 230 100 90 40 Cさん 200 70 80 50 今、合計の降順に並んでいますが、 これを、コマンドボタンクリックにより、 英語の降順に並びなおそうと考えています。 1度2次元配列にデータを代入し、arrays.sortで、 並び替え、再度、Jtableで表示するつもりです。が、 jTableに、もっと簡単に並び替えて表示させる 方法はないでしょうか? よろしくお願いいたします。

  • JTableにデータとJCheckBoxを追加

    JTableに他画面にあるJTxtFieldの値とJCheckBoxを追加したいです。以下のような感じに!! ┌―─┬――――┬――――┬―――┐ │確認│品物  │サイズ │個数 │ ├――┼――――┼――――┼―――┤ │□ │婦人服 │ S  │2  │ ├――┼――――┼――――┼―――┤ ってな感じにレイアウトしたいです。 ちなみに、他画面からデータを追加する時はJButtonで追加していきます

  • DBの表の内容を全取得したい(PDO)

    DBおよびPG初心者です。 単語や説明に不備がありましたらご指摘下さい。 DB内の各テーブルをブラウザで視覚的に確認するために 選択したテーブルの内容を取得したいと思っております。 DB各種に汎用的に使えるPDOモジュール(?)を使用。 ■ DBMS上にあるDB数と各々のDB名を取得(配列に格納される?) するにはどのように記述すればよいでしょうか。 ■ DB内のテーブル数と各々のテーブル名を取得(配列に格納される?) するにはどのように記述すればよいでしょうか。 ■ テーブルのカラム数はcolumnCount()で取得することができたのですが、 それぞれのフィールド名はどのように取得すればよいのでしょうか。 ご教示の程よろしくお願い致します。

    • 締切済み
    • PHP
  • 特定のフィールドの文字列を取得

    初心者ですがよろしくお願い致します。 □わからない事 ・特定のフィールドの文字列を取得 ・取得した文字列を配列に格納 □条件 ・mysqlにはすでにデータが登録済み ・PHPより操作 □具体例 フィールド名(hogehoge)に文字列が入っています。 AAAAAA(10000レコード) BBBBBB(5000レコード) CCCCCC(3000レコード) DDDDDD(1000レコード) ・・・・・・(・・・・レコード) 重複が多数ありますが、重複しない文字列だけを取り出して配列に格納したいと思っていますが、うまいやり方がわかりません。 どなたか教えて頂けませんか? よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • JTableにおけるTABイベント取得について

    現在JTableを勉強しているのですが、 JTalbeでセルにフォーカスがある場合普通「TABキー」を押したときはフォーカスは右に移動すると思います。(右端にに到達したときは一段下がって左端といったように) そのイベント(タブ移動)使ってTABでフォーカスが移ったCellを編集できるようにEditモードにしたいと考えています。現在JTABEを以下のように実装しています -------ソース------- resultTable = new ETable(vecResult,clmName); ListSelectionModel cellSelectionModel = resultTable.getSelectionModel(); cellSelectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); cellSelectionModel.addListSelectionListener(this); * 内部テーブルクラス class ETable extends JTable{ public ETable( Vector rowList, Vector clmnList ){ super(rowList,clmnList); DefaultTableColumnModel colModel = (DefaultTableColumnModel)getColumnModel(); //0番目のカラムを取得する for (int i=0;i<clmnList.size();i++){ TableColumn col0 = colModel.getColumn( i ); //0番目のカラムにMyCellEditorをセットする col0.setCellEditor( new MyCellEditor( new JTextField() ) ); } } } public void valueChanged(ListSelectionEvent e) {   //Cellの値が変わったときのイベント(APIによると…)   *実際はセルをクリックするたびに走ってしまう(不思議)  }   このソースに追加して実現することはできるでしょうか? よきアドバイスをよろしくお願いします。

  • JavaのjTableについて

    JavaのEclipse3.2でアプリケーションの勉強をしているのですが、 わからないことがあります。 i=1 model = new DefaultTableModel( i , 2 ); jTableのセルの表示が、1行2列になっています。 [0,0]=空白 [0,1]=空白 この時、[0,0]に1と入力して、 [0,0]= 1 [0,1]=空白 Enterを押すと2行目がないので、カーソルは[0,1]に移動します。 が、自分はこれを↓ キーボードのEnterを押すことで、 [0,0]= 1 [0,1]=空白 [1,0]= 空白 [1,1]=空白 2行2列の配列とjTableの表示も2行2列に変わる。 カーソルは[1,0]に移動。 また、[1,0]に2を入力。 [0,0]= 1 [0,1]=空白 [1,0]= 2 [1,1]=空白 Enterを押す。 [0,0]= 1 [0,1]=空白 [1,0]= 2 [1,1]=空白 [2,0]= 空白 [2,1]=空白 のように表示させたいのですが、どうすれば良いのでしょうか? ※説明下手ですいません。 それとも、 『キーボードのEnterを押す』ていうActionってあるのでしょうか? 以上 ご回答よろしくお願いします。

    • ベストアンサー
    • Java
  • ADOで現在のレコードの次のレコードの値も取得

    ADOで現在のレコードの次のレコードの値も取得するには? アクセスに対してADOでデータを取得しているのですが 例えばテーブルに フィールド1 あああ いいい ううう と入ってる時に、1レコード目のあああの値を取得しているときに、同時に次のレコードのいいいの値も取得することは可能ですか? Sub Sample() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "SELECT * FROM テーブル1", cn, adOpenStatic, adLockPessimistic For i = 1 To rs.RecordCount MsgBox rs("フィールド1") '現在のレコード MsgBox rs("フィールド1") + 1 '次のレコード rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub これだとダメなようです。 あああ いいい が表示されるようにしたいのですが、どうすればいいか教えてください。

  • JTableに、JConboBoxを入れる

    JTableのcolumn=0に、部署を入れます。 そしてcolumn=5に、JComboBoxを設定し、そのcolumn=5 のデータは、コンボボックスから選択してもらいます。 ただ、このコンボボックスの内容は、column=0に入れた 部署により変更したのです。 いろいろと参考にして、テーブルの指定のcolumnに コンボボックスを入れることは出来たのですが、 全部同じコンボボックスになってしまいます。 以下のようにしました。TableColumn の為、 みな同じになるのはわかるのですが、修正方法が わかりません。宜しくお願いいたします。 public void stepColumn(JTable table, TableColumn stepColumn) {  JComboBox comboBox = new JComboBox();  comboBox.setEditable(true);  comboBox.addItem("step_AAA");  comboBox.addItem("step_BBB");  stepColumn.setCellEditor(new DefaultCellEditor(comboBox)); }

専門家に質問してみよう