• ベストアンサー

JTableのViewの操作に関して

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

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

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

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

(1) 表示、非表示を司るプロパティはありません。 かわりにViewクラス(この場合はJTable)から列を削除したり追加したりさせます。 TableColumn column table.getColumn("TEL"); table.removeColumn(column); table.addColumn(column); 一般には表示状態を記憶する変数を用意し、表示/非表示のリクエストがあるたびに Viewクラスを再構築させるようにすると思います。 ちなみにこの方法で列を消したり追加しても内部のデータに影響は出ません。 自分だったら列の表示・非表示ができるJTableのサブクラスを作りますね。 (2) こちらも表示・非表示することはできず、表示させたくない場合は Modelクラスから全ての行を削除することになるでしょう。 削除すると値の保持はされませんので、元のModelのコピーを作っておく必要があるでしょう。 ざっくり書きましたが、この2つを実装するのはおそらく結構しんどいです。

renann
質問者

お礼

アドバイスありがとうございます。 Jtableは、便利なんだけど、やはりEXCELほどの作りこみはやりにくいですね。。。 アドバイスどおり、View操作を行うJtableのサブクラスを作成しました。

その他の回答 (1)

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.2

条件によって手段が変ってきます。 ・補足要求1 テーブルは表示だけか、それとも入力があるのか ・補足要求2 非表示というのは常に非表示なのか、表示/非表示の切り替えがあるのか

関連するQ&A

  • vbscriptの偽条件処理について

    VBスクリプトで以下の処理をさせたいのですが 行き詰まってしまいました。お助けください 以下のようにfilename.txtというファイルがあり 人名と文字列があります。 このうち、特定の文字列が"存在しない"人名を出力したいのです。 例えば、「abcde」をキーとするとyamada,satoを出力したいです。 「zzzz9」をキーとするとyamadaと出力する具合です。 よろしくお願いいたします filename.txt(定義ファイル) ---------------------- yamada xxx1 yamada yyy4 tanaka zzzz9 tanaka abcde sato zzzz9 ----------------------

  • jarファイル内のクラスからjarファイル名の取得

    こんにちわ!yukimura1024です。 ちょっとわかりにくいタイトルかもですが質問です(^^; ○前提条件 1.コマンドプロンプトで以下のようにjarファイルを実行します。  java -jar xxx.jar xxx1 xxx2 2.xxx.jarのなかはx.class、y.class、z.class、と3つのクラスがあり、   x.classのmainメソッドが最初に呼び出されます。 ○質問 上記条件のとき、x.classのmainメソッド内で「xxx.jar」という文字列を取得したいのですが こんなことは可能でしょうか? なぜこんなことをしたいのかというと以下の理由からです。 1.xxx.jarのほかにyyy.jarというjarファイルも作成し、x.class、y.class、z.classを格納する。 2.yyy.jarも最初にx.classのmainメソッドが呼び出される。 3.x.classのmainメソッド内でxxx.jar、yyy.jarのどちらとして呼び出されたのか知りたい! ※2つのjarファイルに格納するx.class、y.class、z.classはまったく同じものです。 アドバイスいただける方いましたらお願いします。

    • ベストアンサー
    • Java
  • SwingでJtableのヘッダ行が表示されません

    SwingでJtableのヘッダ行が表示されません 解決方法とどうして表示されなかったのか理由もできればお願いします。 import java.util.Vector; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; public class Table_Calendar extends JFrame{ Vector<String>[] data = new Vector[3]; public static void main(String args[]){ new Table_Calendar(); } public Table_Calendar(){ super(); // ウィンドウサイズ this.setSize(800, 600); // レイアウト this.setLayout(null); // ウィンドウクローズ時の処理 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // セルのデータ作成 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"); // テーブル作成 TableModel tableModel = new AbstractTableModel() { // 行数 public int getRowCount() { return 1; } // 列数 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 ""; } }; JTable table = new JTable(tableModel); table.setLocation(10, 20); table.setSize(600,500); JPanel panel2 = new JPanel(); panel2.setLayout(null); panel2.add(table); /*setBounds(int x,int y,int width,int height)*/ panel2.setBounds(10, 10, 700,700); this.add(panel2); this.setVisible(true); } }

    • ベストアンサー
    • Java
  • TIMESTAMP型が含まれるテーブルの列名の取得

    Oracle 11gを使用しているSQL初心者です。 テーブルの列名を取得する方法についての質問です。 テーブルの列名を取得するときは以下のSQLで取れると思っています。 select column_name from user_tab_columns where table_name = 'テーブル名'; --実行結果-- COLUMN_NAME ------------------------------ NAME1 NAME2 しかし、テーブルにTIMESTAMP型が含まれていると 「レコードが選択されませんでした。」 と表示されます。 TIMESTAMP型が含まれるテーブルは上記のSQLでは取得できないのでしょうか。 TIMESTAMP型が含まれるテーブルの列名の取得方法をご存知の方がいらっしゃいましたら、 ご教示ください。よろしくお願い致します。

  • フォルダのプロパティのサイズ欄の見方

    再インストールにあたって、バックアップ→復元にちなんだ質問です。(win98SE) バックアップにあたって、2つ手を打ちました。 1.内臓HDDのデジカメデータの詰まったフォルダをMICROSOFTのバックアップでQIC(無圧縮で)ファイルを作って、外付けHDDに保存しました。 2.念のためデジカメデーターのフォルダをコピペで外付けHDDに保存しました。 そして再インストールが終わって、.QICから復元に成功したのですが、復元したフォルダと、2のものをそれぞれプロパティで見ると、サイズの部分で数値に差があります。 ------------------------------------- サイズ X.XXGB (X,XXX.XXX.XXXバイト)、Y.YYY.YYY.YYY バイト使用 ------------------------------------- 上記"X"の部分と、ファイル数は同じなのですが、上の最後のYの数値部分が違います。  復元に失敗したわけではないので、たいした問題ではないと思いますが、疑問です。 そのフォルダのサイズは1.99GBで、"Y"の差分は13,344,768で、"2"の方が大きいです。 何か問題でもあるのでしょうか? 大切なデータなので、心配です。どうかお願いいたします。

  • ファイル型の操作がうまくいきません(pascal)

    名前と電話番号を入力するとそれらのデータを外部環境のファイル'teldata'に出力し、内容を全て表示させるプログラムを作っています。 入力可能な人数は特に定めない・'teldata'はレコード型を成分とするファイル、という条件の下作成したのですがどうしてもエラーが出てしまいます。 どう改善すればいいのかご教授ください。 ソース) program kadai(input,output,meibo);     {line 3} type KojinData = record name : packed array[1..20] of char; tel : packed array[1..15] of char end; var meibo : file of KojinData; x : array[1..100] of KojinData; name : packed array[1..20] of char; tel : packed array[1..15] of char; i : integer; begin rewrite( meibo,'teldata' ); i :=0; write('名前:'); readln( name ); repeat i := i+1; x[i].name := name; write( meibo,x[i].name ); {line 23} write('電話番号'); readln( tel ); x[i].tel := tel; write( meibo,x[i].tel );         {line 27} write('名前:'); readln( name ) until (name='end'); reset( meibo,'teldata' ); while not eof( meibo ) do begin for i := 1 to 100 do begin read( meibo,x[i].name,x[i].tel );    {line 34} writeln( x[i].name,x[i].tel ) end end end. エラーメッセージ) E 25190 line 23 - Type clash: string is incompatible with record ... 25430: Type mismatch in write to non-text file E 25190 line 27 - Type clash: string is incompatible with record ... 25430: Type mismatch in write to non-text file E 25190 line 34 - Type clash: record is incompatible with string E 25420 line 34 - Type mismatch in read from non-text file E 25190 line 34 - Type clash: record is incompatible with string E 25420 line 34 - Type mismatch in read from non-text file 次の課題の「検索したい人の名前を打ち込み対応する電話番号を答える」ようにもしたいので配列xを作り最大100人としています(人数を定めないように組めなかったのでとりあえず)。

  • 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
  • [ASP+SQLserver]列名から列番号を取得できないか?

    こんにちわ。 ASPでDBを扱うWebページを作っています。 次のようなデータベースがあるとします・・・ (0),(1),(2),(3) →列番号 ID,Name,Tel,Email こういう場合、 Response.write ("Tel") とか Response.write (2) とかでその内容が表示できますよね? それを踏まえて・・・。 このデータベースの列名「Tel」がわかっていてその列が何番にあるか、、、この場合「2」であるということが知りたい場合はどのようにすればいいでしょうか? そういうコマンドなどあればうれしいのですが・・・。 お手数をおかけしますが宜しくお願いいたします。

  • 2変数関数のマクローリン展開に関する質問です。

    https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1153469631 の4番の問題で   f(x,y) = e^x*ln(1+y) を3次展開までした答は   f(x,y )≒ y + xy + (1/2)x^2*y - (1/2)y^2 - (1/2)xy^2 となっていますが、自分の計算とは合いません。まちがいを指摘していただけたら幸いです。 f(x,y) = e^x*ln(1+y)   f_x  = e^x*ln(1+y)  :f_x(0,0)  = 0   f_y  = e^x/(1+y)   :f_y(0,0)  = 1   f_xx = e^x*ln(1+y)  :f_xx(0,0) = 0   f_xy = 1/(1+y)e^x  :f_xy(0,0) = 1   f_yy = -e^x/(1+y)^2 :f_yy(0,0) = -1   f_xxx = e^x*ln(1+y) :f_xxx(0,0) = 0   f_xxy = e^x/(1+y)  :f_xxy(0,0) = 1   f_xyy = -e^x/(1+y)^2 :f_yyy(0,0) = -1   f_yyy = 2e^x/(1+y)^3 :f_xyy(0,0) = 2   f(x,y) ≒ y + (1/2)(2xy - y^2) + (1/6)( 3x^2y - 3xy^2 + 2y^3 )       = y + xy - (1/2)y^2 + (1/2)x^2y - (1/2)xy^2 + (1/3)y^3. --------------- 使った公式   f(x,y)    = f(0,0) + (1/1!)( x(∂/∂x) + y(∂/∂y) )f(0,0)    + (1/2!)( x(∂/∂x) + y(∂/∂y) )^2*f(0,0)    + (1/3!)( x(∂/∂x) + y(∂/∂y) )^3*f(0,0) + ……    = f(0,0) + f_x(0,0)*x + f_y(0,0)*y    + (1/2)( f_xx(0,0)*x^2 + f_xy(0,0)*2xy + f_yy(0,0)*y^2 )    + (1/6)( f_xxx(0,0)*x^3 + f_xxy(0,0)*3x^2y    + f_xyy(0,0)*3xy^2 + f_xxx(0,0)*y^3) + ……

  • SQL Server:UNIONで結合した結果にIDを追加するには?

    いつも参考にさせて頂いています。 下記のような、テーブル、tabAとtabBを UNIONした結果にcol1の昇順でIDカラムをを追加して 表示するにはどのようなSQL文を書けばよろしいでしょうか? ご存知の方、宜しくお願い致します。 【tabA】 col1 col2 --------- 100 AAA 110 BBB 120 CCC 【tabB】 col1 col2 --------- 200 XXX 210 YYY 220 ZZZ 【結果】 ID col1 col2 ------------ 1 100 AAA 2 110 BBB 3 120 CCC 4 200 XXX 5 210 YYY 6 220 ZZZ