如何添加到JTable?
How to add to JTable?
我正在尝试在 Java 中制作 Punnett Square,为此我需要使用变量编辑 JTable 中的单元格。
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class JTableCreatingDemo {
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object rowData[][] = { { "Row1-Column1", "Row1-Column2", "Row1-Column3" },
{ "Row2-Column1", "Row2-Column2", "Row2-Column3" } };
Object columnNames[] = { "Column One", "Column Two", "Column Three" };
JTable table = new JTable(rowData, columnNames);
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);
frame.setSize(300, 150);
frame.setVisible(true);
}
}
我正在通过该代码了解 JTable,有什么方法可以添加到 rowData[][] 和 columnNames[]?
或者使用 JTable 制作 Punnett Square 程序的任何其他方式?
编辑:
这是包含 table
的方法
public void f12(List<String> fin, int a){
JFrame gamFrame = new JFrame();
Object column[] = {"Gametes", "Gametes"};
Object rowGam[][] = {};
final DefaultTableModel model = new DefaultTableModel(rowGam, column);
JTable gametes = new JTable(model);
double d = Math.pow(10,a - 1);
String[] rowData = new String[2];
for (int e = a - 1; e > 0; e--){
d += Math.pow(10, e - 1);
}
String a1 = "", a2 = "";
if (d > 10){
a1 = fin.get(0);
}
if (d == 11){
a2 = fin.get(1);
}
rowData[1] = String.format(a1 + a2);
model.addRow(rowData);
JScrollPane scrollPane = new JScrollPane(gametes);
gamFrame.add(scrollPane, BorderLayout.CENTER);
gamFrame.pack();
gamFrame.setVisible(true);
}
if (d > 10){
a1 = fin.get(0);
}
if (d == 11){
a2 = fin.get(1);
}
稍后会稍微复杂一些,但 table 也不适用于此。
在上述情况下,fin = {A, B} 且 a = 2。
我的预期结果是 table 一列 (配子) 和下面一行 (AB)。
最简单的解决方案:使用 DefaultTableModel 对象,如果要向其添加新行数据,然后调用其 addRow(...)
方法。
例如:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class JTableCreatingDemo {
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object rowData[][] = {
{ "Row1-Column1", "Row1-Column2", "Row1-Column3" },
{ "Row2-Column1", "Row2-Column2", "Row2-Column3" } };
Object columnNames[] = { "Column One", "Column Two", "Column Three" };
final DefaultTableModel model = new DefaultTableModel(rowData,
columnNames);
JTable table = new JTable(model);
JScrollPane scrollPane = new JScrollPane(table);
JPanel btnPanel = new JPanel();
btnPanel.add(new JButton(new AbstractAction("Add Data") {
@Override
public void actionPerformed(ActionEvent e) {
int rows = model.getRowCount() + 1;
String[] rowData = new String[3];
for (int i = 0; i < rowData.length; i++) {
rowData[i] = String.format("Row%d-Column%d", rows, (i + 1));
}
model.addRow(rowData);
}
}));
frame.add(scrollPane, BorderLayout.CENTER);
frame.add(btnPanel, BorderLayout.PAGE_END);
// frame.setSize(300, 150);
frame.pack();
frame.setVisible(true);
}
}
同样,您可以使用 DefaultTableModel 的其他方法,例如 removeRow(...)
和 setValueAt(...)
。如果这还不能满足您的需求,那么您需要创建自己的 TableModel,它是从 AbstractTableModel 扩展而来的。这将需要更多工作,但会导致 class 更符合 OOP。
我正在尝试在 Java 中制作 Punnett Square,为此我需要使用变量编辑 JTable 中的单元格。
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class JTableCreatingDemo {
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object rowData[][] = { { "Row1-Column1", "Row1-Column2", "Row1-Column3" },
{ "Row2-Column1", "Row2-Column2", "Row2-Column3" } };
Object columnNames[] = { "Column One", "Column Two", "Column Three" };
JTable table = new JTable(rowData, columnNames);
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);
frame.setSize(300, 150);
frame.setVisible(true);
}
}
我正在通过该代码了解 JTable,有什么方法可以添加到 rowData[][] 和 columnNames[]?
或者使用 JTable 制作 Punnett Square 程序的任何其他方式?
编辑:
这是包含 table
的方法public void f12(List<String> fin, int a){
JFrame gamFrame = new JFrame();
Object column[] = {"Gametes", "Gametes"};
Object rowGam[][] = {};
final DefaultTableModel model = new DefaultTableModel(rowGam, column);
JTable gametes = new JTable(model);
double d = Math.pow(10,a - 1);
String[] rowData = new String[2];
for (int e = a - 1; e > 0; e--){
d += Math.pow(10, e - 1);
}
String a1 = "", a2 = "";
if (d > 10){
a1 = fin.get(0);
}
if (d == 11){
a2 = fin.get(1);
}
rowData[1] = String.format(a1 + a2);
model.addRow(rowData);
JScrollPane scrollPane = new JScrollPane(gametes);
gamFrame.add(scrollPane, BorderLayout.CENTER);
gamFrame.pack();
gamFrame.setVisible(true);
}
if (d > 10){
a1 = fin.get(0);
}
if (d == 11){
a2 = fin.get(1);
}
稍后会稍微复杂一些,但 table 也不适用于此。
在上述情况下,fin = {A, B} 且 a = 2。
我的预期结果是 table 一列 (配子) 和下面一行 (AB)。
最简单的解决方案:使用 DefaultTableModel 对象,如果要向其添加新行数据,然后调用其 addRow(...)
方法。
例如:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class JTableCreatingDemo {
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object rowData[][] = {
{ "Row1-Column1", "Row1-Column2", "Row1-Column3" },
{ "Row2-Column1", "Row2-Column2", "Row2-Column3" } };
Object columnNames[] = { "Column One", "Column Two", "Column Three" };
final DefaultTableModel model = new DefaultTableModel(rowData,
columnNames);
JTable table = new JTable(model);
JScrollPane scrollPane = new JScrollPane(table);
JPanel btnPanel = new JPanel();
btnPanel.add(new JButton(new AbstractAction("Add Data") {
@Override
public void actionPerformed(ActionEvent e) {
int rows = model.getRowCount() + 1;
String[] rowData = new String[3];
for (int i = 0; i < rowData.length; i++) {
rowData[i] = String.format("Row%d-Column%d", rows, (i + 1));
}
model.addRow(rowData);
}
}));
frame.add(scrollPane, BorderLayout.CENTER);
frame.add(btnPanel, BorderLayout.PAGE_END);
// frame.setSize(300, 150);
frame.pack();
frame.setVisible(true);
}
}
同样,您可以使用 DefaultTableModel 的其他方法,例如 removeRow(...)
和 setValueAt(...)
。如果这还不能满足您的需求,那么您需要创建自己的 TableModel,它是从 AbstractTableModel 扩展而来的。这将需要更多工作,但会导致 class 更符合 OOP。