
JTableを使って表計算出来るアプリを作りたいなと思ってますが
分からない事だらけで・・・
まずはリファレンスなるものに慣れるのが先決かも判りませんが。
やりたい事は
・セルを使って四則計算がしたい。
・入力したデータを保存したい。
ネットで検索したりここの過去ログやを見るとどうやら
XMLを使うのが手軽みたいですがセルに入力されたデータは
どういう風に保存するのでしょうか?
XML関連のページを見たりしてJavaでXML文書を操作
出来ると言うのは一応理解してますが、
その処理をどういう風にJTableを使って作れば良いのか
判らないんです。
稚拙な質問かもわかりませんがよろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
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/java …
//↓このページの冒頭部にテーブルモデルについての説明がある
http://www.javadrive.jp/tutorial/jtable/index1.h …
※このページの最後のほうに
DefaultTableModelを使ったサンプルがあるので、みてみよう。
No.2
- 回答日時:
>XMLを使うのが手軽
「XML使えば手軽」ということはないと思います。
(すくなくともXML使う必然性はない)
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
を使わないと実現できません。
上記ソースの意味が理解できたらまたレスします。
早速回答を頂いたのに返事が遅れてしまって
大変申し訳ありません。
今、TableCellRendererとTableCellEditorについて
リファレンスを見てたんですが、イマイチよく判りませんでした(;^_^A アセアセ・・・
書いて頂いたソースの内容はそれとなく理解できるんですけど…
Renderer(はよく判らないんですが)、Editorを使ってセルを編集出来るようにするんですよね?
XMLは比較的、簡単に文書を構造化して保存出来るとの事なので
利用しようかと思ったのですが…
後、DBはよく判らないです(;^_^A アセアセ・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Excel(エクセル) iphonからone driveに保存してあるExcelを閲覧すると表示の仕方がちがうデータ 2 2022/12/21 13:51
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Excel(エクセル) Excel(エクセル)でフィルター抽出後、非表示の行を計算しないで、合計を算出する方法 【内容】 添 4 2023/01/30 17:17
- Excel(エクセル) excelで可視セルのみ置換 3 2022/08/04 11:02
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Excel(エクセル) エクセルで値ではなく関数を参照する方法 6 2023/03/19 00:50
- Excel(エクセル) Excel 表の作成について 3 2022/06/16 12:15
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Visual Basic(VBA) VBA ドロップダウンリストを残して値のみクリア 2 2022/10/27 05:42
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
行の途中から読み込む方法
-
C++からC#のdllを参照する際、...
-
javaでcsvファイル読込時の改行...
-
java 長さの異なる配列の代入
-
arrayの中にarrayをほぞんする...
-
C#で実行時にメソッドの返り値...
-
木構造を描写すると重なる
-
JTableの表からデータ保存等に...
-
前日日付の取得
-
[JAVA]try 内の変数を外で!?
-
IF関数でEmpty値を設定する方法。
-
BOOL値を逆にしたい
-
ダブルクォーテーションを含む...
-
System.out.printlnの出力先
-
ループ処理の際、最後だけ","を...
-
一定のスペースを空けて端を揃...
-
ダブルクォーテーションのrepla...
-
動的配列が存在(要素が有る)か...
-
JSPやサーブレットでSystem.out...
-
EclipseでJava
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
c# デリゲート関連の命名について
-
javaでcsvファイル読込時の改行...
-
行の途中から読み込む方法
-
C#で実行時にメソッドの返り値...
-
java初心者の質問(3つの整数の...
-
DataSet(DataTable)の使い方
-
式の型は配列型で int に解決済...
-
java spring でエラーが出て困...
-
【C#】フォームをなめらかに移動
-
javaでカレンダー作成
-
メインが含まれていません
-
SwingでJtableのヘッダ行が表示...
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
アンマネージDLLで、ダイアログ...
-
コード中の謎のエラー
-
Java 初心者 int型の取り扱い方
-
似たような名前のメソッドをま...
-
西暦 -> 年号、年号 -> 西暦の...
おすすめ情報