• 締切済み

JTableのCellにJLabelを埋め込むには?

JTableのCellにJLabelを埋め込みたいと思うのですが、独自にCellEditorを作成しなければ、不可能でしょうか? *JTableのCellにわざわざJLabelを埋め込みたい理由は、あるセルの要素(文字列情報)に対してイメージアイコンを付加してJTableに表示したいからです。

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

みんなの回答

noname#49664
noname#49664
回答No.2

JLabelで表示をさせたいのですよね? なら、CellEditorではなくCellRendererでしょう。 まず、レンダリング時にJLabelを返すようなTableCellRendererクラスを定義します。 // TableCellRendererを用意する class MyRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent (JTable table, Object value,boolean isSelected,boolean hasFocus,int row,int column) { JLabel jl = new JLabel(); ・・・必要な処理・・・ return jl; } } そして、JTableを作成した際、このTableCellRendererインスタンスを使用したいコラムにsetCellRendererで組み込みます。 // 組み込み JTable jt1 = new JTable(); jt1.getColumnModel().getColumn(0).setCellRenderer(new MyRenderer());  こんな感じで、JLabelを使ってJTableのセルを表示できるはずです。これは、表示のみで、編集については別途CellEditorを用意して組み込む必要があるでしょう。

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

セルの描画を担当するDefaultTableCellRendererはJLabelを継承したクラスです。 JLabelのようにアイコンを付加したい場合はsetIconメソッドをRendererに対して直接使用できる、だったはずです。 昔同じような実装をやったことがありますが、実装方法を良く思い出せません。うろ覚えで申し訳ないです。

関連するQ&A

  • JTableについて 急

    皆さまのお知恵をお貸頂けると助かります。  JTableクラスを使ってテーブルの列の幅の値を決めたいのと、 数字をセルに入力したいのですが9までは09のように0をつけて 表示したいのですが、2日間止まってしまって困っています。 いろいろとググったりしたのですが 汗

  • Jtableの特定のセルの背景色や文字色について

    Jtable内部の特定のセルの背景色や文字色、フォントの変更に関して質問があります。25行30列のJtableの20行20列目のセルの背景色だけ赤色にしたい場合、具体的にどの様にプログラミングすれば良いでしょうか? サンプルソースなどを教えてくださるとありがたいです! javaに関して詳しい方、ぜひともお力を貸してください!

    • ベストアンサー
    • Java
  • 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
  • JTableのあるセルに値を表示する方法

    やりたい事は、あるJTableのあるセルに値を出したいだけなのです。 あるJTable-AについてはsetValueAtを使用して簡単に値を表示する事が 出来たのですが、別のJTable-Bには同じメソッドを使用しても表示されません。 よくよく、確認してみたところ、JTable-BはAbstractTableModelを派生して 独自に作成したクラスMyModelをsetModelしていました。 MyModelクラスの中身にはやはり、空のsetValueAtメソッドが存在していました。 これで、解決と思ったのですが、setValueAtをコメントアウトしても何も 変わりませんでした。次にsetValueAtに super.setValueAt(~)を記述して(上位におまかせのつもり)やってみましたが 何も変わりませんでした。この場合どうすればセルに値が表示される様に なるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • JTableでスクロールバーが表示されない

    JTableで表を作成しました。 表示はされているのですが、 スクロールバーが表示されません。 コードは下記の通りです。 どうか宜しくお願いいたします。 ■Java import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; public class ren32 extends JApplet{ Container c; public void init(){ c = this.getContentPane(); c.setLayout(null); String[] cname = { "name","comment","test1","test2", "(0)","(1)","(2)","(3)","(4)", }; Object[][] cell = { {"","","","","","","","",""}, }; JTable table = new JTable(cell, cname); JScrollPane sp = new JScrollPane(table); sp.setBounds(10,10,750,380); c.add(sp); } } ■html <html> <head> <title>Ren1</title> <body bgcolor=white text=black> <applet code="ren32.class" width="800" height="500"> </applet> </head> </html>

    • ベストアンサー
    • Java
  • JTableとJScrollPaneの問題

    JTableとJScrollPaneを使って、Excelのsheetのような表を作成したいのですが、 列の入れ替えが可能になっています。 列の入れ替えを出来ないようにしたいのですが、どうしたら良いのでしょうか? 教えて下さい。 また、各セルをセンターリングで表示したいです。 (以下の例の場合、Aと×とかです。) テストプログラム import java.awt.*; import javax.swing.JTable; import javax.swing.JPanel; import javax.swing.JFrame; import javax.swing.JScrollPane; public class testTable extends JFrame { public testTable() { Object[][] data = { {"A","B","×","A","A","×","B",}, {"C","C","C","C","C","×","B",}, {"×","×","×","A","A","×","B",}, {"F","F","F","A","A","×","B",}, }; String[] columnNames = {"日", "月", "火", "水", "木", "金", "土"}; JTable tblSchedule = new JTable(data, columnNames); JScrollPane scrollPane = new JScrollPane(tblSchedule); getContentPane().add(scrollPane, BorderLayout.CENTER); } public static void main(String[] args) { testTable frame = new testTable(); frame.pack(); frame.setVisible(true); } }

  • JTableのViewの操作に関して

    JTableを利用してグラフィカルなテーブル表を作成したいと思っています。 (例) NAME AGE TEL ADDRESS ------------------------------------ tanaka 30  X-X-X XXX yamada 23 Y-Y-Y YYY この際、以下のようなことは実現可能でしょうか? また可能な場合、どのようなコーティングになるのでしょうか? (1)特定の列を非表示にする  例えば"TEL"カラムを非表示にする(ただし内部で内容を保持) (2)値すべてを非表示にする  ただし、"NAME"などの列名(ヘッダー)はそのまま表示する

    • ベストアンサー
    • Java
  • JScrollPane上のJTableの再描画

    JPanel上で,以下の初期化関数を作って,データが更新されたときに,この初期化関数を再度呼び出して,テーブルを作り直しています. 描画直後は,正しく表示されるのですが, スクロールバーに触ったり,セルをクリックしたりすると, 初めに作成したテーブルの表示に戻ってしまいます. 何が原因で,どのように対処すれば良いのでしょうか? ご回答いただけますよう,よろしくお願いいたします. public void init_table() { tablemodel1 = new DefaultTableModel(column_names1, text.keyword_num); table1 = new JTable(tablemodel1); scrollt1 = new JScrollPane(table1); add(scrollt1);     以下略 }

    • ベストアンサー
    • Java
  • Excelのセルない文字抽出について

    やりたいこと画像見て頂いてわかるかどうか不安ですがやりたいことを箇所書きします ・ I5セル内の表示されている内容(文字列)をC2~I2セルに表示されている通りに入力したい 補足説明=I5セル内には関数で次のようになっています =CELL("contents",C5)&CELL("contents",D5)&CELL("contents",E5)&CELL("contents",F5)&CELL("contents",G5)&CELL("contents",H5) なのでI5セルを普通に抽出して次ページに書き出すと関数そのものが入力されてしまいエラー(文字列ではないもの)になってしまう I5セル内の表示されている通り(関数ではなくて見ている見えてる文字列のこと)の内容を次ページのC4セルに直接的書き込みしたいとゆうことと、C2~I2に書き込みしたいとゆうことです。 図書館や他サイトでも独学で努力して調べたり試したりしていますが上手くいかなかったので応用力の知恵のある皆様方へ質問させて頂きました。 この内容でもまだ何がしたいのか伝わらない場合はご連絡ください。 やり方わかる方はやり方を教えて頂きたく平にお願い申し上げます。

  • 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

専門家に質問してみよう