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