• 締切済み

JTableの表からデータ保存等について

JTableを使って表計算出来るアプリを作りたいなと思ってますが 分からない事だらけで・・・ まずはリファレンスなるものに慣れるのが先決かも判りませんが。 やりたい事は ・セルを使って四則計算がしたい。 ・入力したデータを保存したい。 ネットで検索したりここの過去ログやを見るとどうやら XMLを使うのが手軽みたいですがセルに入力されたデータは どういう風に保存するのでしょうか? XML関連のページを見たりしてJavaでXML文書を操作 出来ると言うのは一応理解してますが、 その処理をどういう風にJTableを使って作れば良いのか 判らないんです。 稚拙な質問かもわかりませんがよろしくお願いします。

みんなの回答

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.3

#No.2です。 表(Table)というのは、 「タテ5列×ヨコ3行」 というように、 いわば”2次元配列的に”セルが並んでいる。 ------------------------- 話は変わって…。 ここに二次元配列 cell[3][5] があるとする。 これをファイルに保存するには、どうしたらよいか? 無理のない、かつ簡単な方法は for(x=0; x<3; x++) {  for (y=0; y<5;y++) {   write(cell[x][y]);//セル(x, y)の値    write(",");//カンマ   }  write("\n");//改行 } だろう。 (「CSV形式」で検索) --------------------------- JTableでの表を扱うにしたって、 「表のデータ」が存在するはずで(だよね?)、 さらにそのセル(x, y)にアクセスする方法も存在するはずで、 そのアクセス方法は、基本的には cell[x][y] というふうに2次元配列で提供されているか、または getCell(x, y); というふうにメソッドで提供されているか、のどちらかであろう。 いずれにせよ、 「表形式のデータを保存する方法」 というのは、 「セル一個一個のデータを地道にテキストファイルに並べて書き出す」 というのが基本。 (その書き出し方として、「カンマ区切り(CSV形式)」を採用するか 「XML形式」を採用するかはプログラマの自由) --------------------------- ちなみに… JTableによる表の「データ」の管理を担当しているのは、 JTableではなくTableModelというモノ。 つまり、「表の保存」をやりたいのなら、 JTableにアクセスするのではなく、 (JTableが持つ)TableModelのほうにアクセスする必要がある。 //↓このページの冒頭部(概要説明)も参考に。 http://java.sun.com/j2se/1.4/ja/docs/ja/api/javax/swing/JTable.html //↓このページの冒頭部にテーブルモデルについての説明がある http://www.javadrive.jp/tutorial/jtable/index1.html ※このページの最後のほうに DefaultTableModelを使ったサンプルがあるので、みてみよう。

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.2

>XMLを使うのが手軽 「XML使えば手軽」ということはないと思います。 (すくなくともXML使う必然性はない)

GONTA55
質問者

お礼

手軽ではないんですか… 自分で出来る範囲で調べたんですがDB使うよりは 手軽だと思ったのですが。

  • jun-1
  • ベストアンサー率29% (18/61)
回答No.1

長文ですが、以下のようでどうでしょうか? ================================================= import java.util.*; import javax.swing.*; import javax.swing.table.*; class Table {  public static void main(String[] args) {   Table t = new Table();  }  Table() {   Vector columnNames = new Vector();   for (int i = 0; i < 10; i++) {    columnNames.add(String.valueOf(i));   }   Vector data = new Vector();   Vector tmp;   for (int i = 0; i < 10; i++) {    tmp = new Vector();    for (int j = 0; j < 10; j++) {     tmp.add(String.valueOf(j));    }    data.add(tmp);   }   JFrame jf = new JFrame();   jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   JTable t = new JTable(new TableView(columnNames, data));   if (t.getColumnCount() > 5) {    t.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);    TableColumnModel tcm = t.getColumnModel();    for (int i = 0; i < t.getColumnCount(); i++) {     tcm.getColumn(i).setPreferredWidth(100);    }   }   JScrollPane js = new JScrollPane(t);   jf.getContentPane().add(js);   jf.setSize(500,500);   jf.setVisible(true);  } } class TableView extends AbstractTableModel {  Vector columnNames;  Vector data;  TableView() {   columnNames = new Vector();   data = new Vector();  }  TableView(Vector columnNames, Vector data) {   this.columnNames = columnNames;   this.data = data;  }  public int getColumnCount() {   return columnNames.size();  }  public int getRowCount() {   return data.size();  }  public String getColumnName(int col) {   return (String) columnNames.elementAt(col);  }  public Object getValueAt(int row, int col) {   return ((Vector) data.elementAt(row)).elementAt(col);  }  public Class getColumnClass(int col) {   return columnNames.elementAt(col).getClass();  }  public boolean isCellEditable(int col) {   return true;  }  public void setValueAt(Object value, int row, int col) {   ((Vector) data.elementAt(row)).removeElementAt(col);   ((Vector) data.elementAt(row)).add(col, value);  } } ================================================= データ保存に関しては別にXMLでなくても自分の好きな 方法でいいと思いますよ(ただのプレーンテキストでもDBでも)。 あ、あと上記のソースはセルへの入力は対応していません(表示のみ)。 javax.swing.table.TableCellRenderer javax.swing.table.TableCellEditor を使わないと実現できません。 上記ソースの意味が理解できたらまたレスします。

GONTA55
質問者

お礼

早速回答を頂いたのに返事が遅れてしまって 大変申し訳ありません。 今、TableCellRendererとTableCellEditorについて リファレンスを見てたんですが、イマイチよく判りませんでした(;^_^A アセアセ・・・ 書いて頂いたソースの内容はそれとなく理解できるんですけど… Renderer(はよく判らないんですが)、Editorを使ってセルを編集出来るようにするんですよね? XMLは比較的、簡単に文書を構造化して保存出来るとの事なので 利用しようかと思ったのですが… 後、DBはよく判らないです(;^_^A アセアセ・・・