update specific cell in JTable
の方法を知りたいだけです、
たとえば、cell(1,1)の値をTest Value
に設定したい場合などです。
私のコードはこのようになりますが、私には機能しません:
String s = "Test Value";
tableName.setValueAt((Object)s, 1, 1);
DefaultTableModel#setValueAt()
の使用を検討している可能性があります
DefaultTableModel model = (DefaultTableModel)tableName.getModel();
model.setValueAt(s, 1, 1);
まず、DefaultTableModel
でテーブルを指定する必要があります
DefaultTableModel model = new DefaultTableModel(data, cols);
JTable table = new JTable(model);
この例を実行して確認できます
import Java.awt.BorderLayout;
import Java.awt.event.ActionEvent;
import Java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class TestTable {
String[] cols = {"Col 1", "Col2"};
String[][] data = {{"Hello", "World"},{"Hello", "World"}};
DefaultTableModel model = new DefaultTableModel(data, cols);
JTable table = new JTable(model);
JButton button = new JButton("Set Value at 1, 1");
JTextField text = new JTextField(20);
public TestTable() {
JPanel panel = new JPanel(new BorderLayout());
panel.add(table, BorderLayout.NORTH);
panel.add(text, BorderLayout.CENTER);
panel.add(button, BorderLayout.SOUTH);
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String value = text.getText();
model.setValueAt(value, 1, 1);
}
});
JFrame frame = new JFrame();
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TestTable();
}
});
}
}
[〜#〜] edit [〜#〜] Productクラスを使用します。
「8つのフィールドを持つクラスProductsを作成しました。やりたいのは、ループを使用してArrayListのデータをテーブルに入力することです。」
.addRow
を使用して動的に行を追加します。各Product
から各フィールドを取得し、それを行にする必要があります。次に、このようにその行を追加します。注:getters
を使用する必要がありますが、簡潔にするために使用しませんでした。
for (Product p : list) {
String data1 = p.field1;
int data2 = p.field2;
int data3 = p.field3;
int data4 = p.field4;
int data5 = p.field5;
int data6 = p.field6;
int data7 = p.field7;
int data8 = p.field8;
Object[] row = {data1, data2, data3, data4, data5, data6, data7, data8};
model.addRow(row);
}
import Java.awt.BorderLayout;
import Java.awt.event.ActionEvent;
import Java.awt.event.ActionListener;
import Java.util.ArrayList;
import Java.util.List;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class TestTable {
String[] cols = {"Col 1", "Col 2", "Col 3", "Col 4", "Col 5", "Col 6", "COl 7", "Col 8"};
DefaultTableModel model = new DefaultTableModel(cols, 0);
JTable table = new JTable(model);
JButton button = new JButton("Set Table");
List<Product> list;
public TestTable() {
JPanel panel = new JPanel(new BorderLayout());
panel.add(new JScrollPane(table), BorderLayout.CENTER);
panel.add(button, BorderLayout.SOUTH);
list = getOneRow();
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
for (Product p : list) {
String data1 = p.field1;
int data2 = p.field2;
int data3 = p.field3;
int data4 = p.field4;
int data5 = p.field5;
int data6 = p.field6;
int data7 = p.field7;
int data8 = p.field8;
Object[] row = {data1, data2, data3, data4, data5, data6, data7, data8};
model.addRow(row);
}
}
});
JFrame frame = new JFrame();
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public List<Product> getOneRow() {
List<Product> list = new ArrayList<>();
list.add(new Product("Product 1", 1, 2, 3, 4, 5, 6, 7));
list.add(new Product("Product 2", 1, 2, 3, 4, 5, 6, 7));
list.add(new Product("Product 3", 1, 2, 3, 4, 5, 6, 7));
list.add(new Product("Product 4", 1, 2, 3, 4, 5, 6, 7));
return list;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TestTable();
}
});
}
}
class Product {
String field1;
int field2;
int field3;
int field4;
int field5;
int field6;
int field7;
int field8;
public Product(String s, int f2, int f3, int f4, int f5, int f6, int f7, int f8) {
field1 = s;
field2 = f2;
field3 = f3;
field4 = f4;
field5 = f5;
field6 = f6;
field7 = f7;
field8 = f8;
}
}