アプリ版:「スタンプのみでお礼する」機能のリリースについて

JTableを使って表計算出来るアプリを作りたいなと思ってますが
分からない事だらけで・・・
まずはリファレンスなるものに慣れるのが先決かも判りませんが。

やりたい事は
・セルを使って四則計算がしたい。
・入力したデータを保存したい。

ネットで検索したりここの過去ログやを見るとどうやら
XMLを使うのが手軽みたいですがセルに入力されたデータは
どういう風に保存するのでしょうか?
XML関連のページを見たりしてJavaでXML文書を操作
出来ると言うのは一応理解してますが、
その処理をどういう風にJTableを使って作れば良いのか
判らないんです。
稚拙な質問かもわかりませんがよろしくお願いします。

A 回答 (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/java …

//↓このページの冒頭部にテーブルモデルについての説明がある
http://www.javadrive.jp/tutorial/jtable/index1.h …
※このページの最後のほうに
DefaultTableModelを使ったサンプルがあるので、みてみよう。
    • good
    • 0

>XMLを使うのが手軽



「XML使えば手軽」ということはないと思います。
(すくなくともXML使う必然性はない)
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/06/07 16:44

長文ですが、以下のようでどうでしょうか?



=================================================
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
を使わないと実現できません。

上記ソースの意味が理解できたらまたレスします。
    • good
    • 0
この回答へのお礼

早速回答を頂いたのに返事が遅れてしまって
大変申し訳ありません。

今、TableCellRendererとTableCellEditorについて
リファレンスを見てたんですが、イマイチよく判りませんでした(;^_^A アセアセ・・・
書いて頂いたソースの内容はそれとなく理解できるんですけど…
Renderer(はよく判らないんですが)、Editorを使ってセルを編集出来るようにするんですよね?

XMLは比較的、簡単に文書を構造化して保存出来るとの事なので
利用しようかと思ったのですが…
後、DBはよく判らないです(;^_^A アセアセ・・・

お礼日時:2004/06/07 16:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!