• ベストアンサー

JTableのセルとコラムについて

以下の(1)、(2)の方法を知っている方がいらしたら教えてください。 (1)JTableではテーブル内のセルをクリックした時に、クリックされたセルを含む行全体が選択状態になりますが、選択状態時にこの選択されているのがどの行なのかを調べる方法はありませんか? (2)WindowsMediaPlayerのように"アーティスト"のコラムを選択すると名前順にソートされますが、それをJTableで実現するために、JTableのコラムを選択したらイベントを発生させてその選択されたコラムを特定する方法はありませんか?

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

質問者が選んだベストアンサー

  • ベストアンサー
  • bgbg
  • ベストアンサー率53% (94/175)
回答No.1

(1) getSelectedRowかgetSelectedRows(複数選択できる場合)で取得できます。 getSelectionRowはint型、getSelectionRowsはint型配列で返ります。 (2) ソート処理したいJTableHeaderにMouseAdapterをimplementsして、mouseClickedイベントを捕まえます。 詳細は、 http://java-house.jp/ml/archive/j-h-b/021576.html が参考になると思います。

marucha
質問者

お礼

(1)(2)ともなんとかできました。(カラムをボタン化することはできませんでしたが...)。 ありがとうございました。

関連するQ&A

  • jTable:複数選択時の選択範囲

    こんにちは。 javaのjTableについてお伺いしたいことがあります。 jTableを[ctrl]キーを押しながら左クリックを押すと複数のセルを選択できるようにしたいと思います。「列」を(A,B,C,D…)で表し、「行」を(1,2,3,4…)で表すExcel風で言うと、(D1)→(C5)の順で選択すると(D1)と(C5)だけが選択状態になり、色が変わることが理想です。 ところが現実に(D1)→(C5)の順で選択すると(D1)(C5)だけでなく(D5)(C1)も選択状態になり、そこの色も変わってしまいます。どうすれば理想の状態になるか、ご教授お願い致します。

    • ベストアンサー
    • Java
  • JTableで右クリック

    JTableで右クリックしたときに、マウスがあるセルを選択し、 ポップアップメニューを表示したいのですが、どうしたらよいでしょう? JTableは右クリックしても、そのセルを選択できないんでしょうか? 困ってます。回答をお願いします。

    • ベストアンサー
    • Java
  • jTableのセルを入力禁止にしたい。

    jTable上でマウスをダブルクリックしたときにセルが入力可能状態になることを 禁止したいのですがどのようにすれば良いですか? 環境はNetBeansを使用しています。

  • JTableでのCELLの複数選択

    はじめまして。私は今、JTableで複数のセルを選択するプログラムを作成しています。 JTable.changeSelectionの日本語APIリファレンスを見ると toggle:true、extend:false指定されたセルが選択されている場合、そのセルを選択解除する。選択されていない場合、そのセルを選択する。 と記載されていた為、 初期化字に setCellSelectionEnabled(true) を行い、以下のように changeSelection(0, 0, false,false); changeSelection(1, 1, true,false); とすると、セル(0,0) セル(1,1)以外に セル(0,1) セル(1,0)も選択されてしまいます。 セル(0,0) セル(1,1)の選択(とびとびの選択)を実現するには、どのような手法をとるのがよいのでしょうか? 今のところ、マウスイベント等を使って、メンバ変数に選択状態を記録し、DefaultTableCellRendererを継承したクラスの描画部分で、 そのメンバ変数を利用して、選択状態を更新する方法を検討しているのですが、もう少しシンプルにできればと思っています。 ご教授よろしくお願いいたします。 環境 J2SE 6 OS Windows XP HomeEdition

  • Swing 編集不可でも選択可能なJTableセルの設定方法

    テーブルデータ編集不可でも行選択可能なJTableの設定方法をお教えいただきたいです。 私が試した方法では一つ問題点があり困っております。 その問題点とは、 セルをダブルクリックするとセルがへこみ、 そのまま別イベントでプログラム内部からテーブルへ書き込みをすると、 上記へこんだセルのみ変更が反映されないのです。 JTableを継承したJTableCustomクラスを作成し、 テーブルセル編集の不可設定を行うsetEditFalseメソッドを作成しました。 (補足:JTableのEnabledをfalseにすると行選択ができなくなってしまうので、  CellEditerを使用しています) public class JTableCustom extends JTable { public JTableCustom() { super(); this.setModel(new DefaultTableModel()); this.setSize(300,200); } /** * テーブルセルの編集ができないように設定します。<br> */ public void setEditFalse(){ JTextField tf = new JTextField(""); tf.setEditable(false); DefaultCellEditor dce = new DefaultCellEditor(tf); TableColumnModel tcm = this.getColumnModel(); for (int i = 0; i < tcm.getColumnCount(); i++){ tcm.getColumn(i).setCellEditor(dce); } } } JTableCostomインスタンス作成後、上記メソッドを呼び設定を行います。 上記メソッドにセルがへこまないように設定する方法、 もしくは別の方法で上記機能を満たすものがあれば教えていただきたいです。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • JTableのカラム移動の抑止方法

    現在スクロールペイン(JScrollPane)上にテーブル(JTable)を乗せたGUI構成にしております。 そこで質問なのですが、この構成にすると、画面上でカラムの移動が出来ます。 (カラムヘッダー上でクリックし、そのまま左右に動かすと該当位置にカラム全体が移動します) これを抑止したいのですが、そういう事は可能ですか? または、今現在、そのテーブルのカラム背景色はDefaultTableCellRendererから派生させた独自クラス 内のgetTableCellRendererComponentをオーバーライドしたメソッド内で固定的に5列目だったら 赤みたいな処理を行っていますが、これをカラム移動されたイベントを拾って、動的に変更する事 は可能ですか? 現状、たとえば5列目(赤)を1列目などに移動させると当然、背景色は赤ではなくなって しまっています。 仕様的にカラム移動はマストでは無い為、このオペレーション自体の抑止、あるいは動的に背景色 を切り替えるどちらでも方法は構わないと思っております。 以上、よろしくお願いします。

    • ベストアンサー
    • Java
  • JTableでの入力規則に関して

    javaで作られる表(JTableなど)で、Excelでいうところの入力規則の様な事を実現したいです。 具体的に言うと、table上の1つの特定のセルを選択した後に、セルの内容を複数の選択肢の中(入力規則)から選んで、セルの内容を変更できる様なプログラムを作成したいです。 その様なことはおそらく可能であろうと予想しますが、具体的にどの様にやれば良いのかわからず、困っております。 ぜひともお力を貸していただきたいと考えております。

    • ベストアンサー
    • Java
  • 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)); }

  • JavaのJTableのセル単体の色設定

    今日は JavaのJtableの『マウスで選択したセル』の色を赤色に設定するコードを書きましたが、セル単体でバックグランドの色が変更できまず、行単位で変更されます。 又、変更のタイミングは、他のセルを、マウス選択したときに、以前のセルの行が赤く変更になります。 Q1)セル単体で、バックグランドの変更を行い、その変更タイミングは、クリックと同時に  行う様に改善したく質問いたします。 注)Java暦は、初心者で約2週間ですが。下記にソースを添付いたしますので、宜しくお願いいたします。 //============================== package packageA; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class JTableTest2 extends JFrame{ public static void main(String[] args){ JTableTest2 test = new JTableTest2("T"); test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); test.setVisible(true); } JTableTest2(String name){ setBounds( 0, 0, 400, 200); setTitle(name); String d[][] = { {"A","8","7"}, {"B","6","5"}, {"C","7","6"} }; String t[] = {"名","数","英"}; DefaultTableModel tm = new DefaultTableModel(d,t); final JTable tablex = new JTable(tm); /* final JTable tablex = new JTable(tm){ @Override public Component prepareRenderer(TableCellRenderer tcr, int row, int column) { Component c = super.prepareRenderer(tcr, row, column); if (row == 2 && column == 2) { c.setForeground(Color.BLUE); c.setBackground(Color.RED); } else { c.setForeground(getForeground()); c.setBackground(getBackground()); } return c; } }; */ tablex.addMouseListener( new java.awt.event.MouseAdapter() { public void mousePressed(MouseEvent e) { int row=tablex.getSelectedRow(); int col=tablex.getSelectedColumn(); // TableCellRenderer tcr = tablex.getCellRenderer(row,col); // Component c = tablex.prepareRenderer(tcr,row,col); Component c = tablex.getComponentAt(row,col); c.setForeground(Color.BLUE); c.setBackground(Color.RED); System.out.println(" "+row+" "+col); } } ); JPanel p1 = new JPanel(); JScrollPane sp1 = new JScrollPane(tablex); sp1.setPreferredSize(new Dimension(250, 80)); p1.add(sp1); getContentPane().add(p1, BorderLayout.NORTH); } }

    • ベストアンサー
    • 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に、もっと簡単に並び替えて表示させる 方法はないでしょうか? よろしくお願いいたします。

専門家に質問してみよう