人に聞けない痔の悩み、これでスッキリ >>

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");
}
}

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>2についてはボタンをクリック時にコンソールに「test」という文字列は


>表示できるようになったのですが編集したセルの行のデータをコンソールに
>表示することができません。

JTableからTableModelを取得して、TableModelのgetValueAtで取得して
表示すればいいんじゃない?
っていうかそのためのgetValueAtじゃないかな?
「編集した」ってのは別途なにかに状態を持っておけばいいんじゃない。
    • good
    • 0

3.のみ


おそらくbuttonなどに対してsetLocationしているけど、setLocationしたと思っている位置に表示されない。
ということだろうと思います。
frameに大してはレイアウトマネージャをnullに設定していますが、
buttonなどを入れているpanel1(JPanel)のレイアウトマネージャはnullにしていません。
JPanelのデフォルトのレイアウトマネージャ(FlowLayout)がコンポーネントの位置を管理しているのでsetLocationしても結果として反映されません。
#ただ、panel1のレイアウトマネージャをnullにしただけだと、
#表示されるには色々(panel1の高さとかbuttonの幅とか…)足りないよ。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。質問1と3については解決しましたが
2についてはボタンをクリック時にコンソールに「test」という文字列は表示できるようになったのですが編集したセルの行のデータをコンソールに表示することができません。もし、解決方法をご存知でしたら教えていただけるありがたいのですが。。。

お礼日時:2009/06/26 16:13

1.AbstractTableModelに以下の実装が足りない。



public void setValueAt(Object aValue,int rowIndex,int columnIndex){
data[columnIndex].setElementAt(aValue.toString(),rowIndex);
}

2.とりあえずボタンを押してもイベントが起きていないので以下のように書き換える、これでイベントが起きるので後は考えてください。

public static void main(String[] args) {
JTableSample4 jTableSample4= new JTableSample4();←ココ
}

public JTableSample4(){←ココ
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
JPanel panel1 = new JPanel();
(中略)

JButton button = new JButton("Click Me!");
button.setLocation(10, 400);
button.setSize(20, 20);
button.addActionListener(this);←ココ

3.何が問題なんでしょ?表示されるウインドウの位置のことですか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。質問1と3については解決しましたが
2についてはボタンをクリック時にコンソールに「test」という文字列は表示できるようになったのですが編集したセルの行のデータをコンソールに表示することができません。もし、解決方法をご存知でしたら教えていただけるありがたいのですが。。。

お礼日時:2009/06/26 16:11

このQ&Aに関連する人気のQ&A

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


人気Q&Aランキング