- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 MySQL 中有一些数据,必须检索这些数据并在 JTable 中显示。我为此编写的代码如下
PreparedStatement ps = con.prepareStatement("select * from " + chosenClass
+ " where subjects=?;");
ps.setString(1, selectedGroup);
rs = ps.executeQuery();
rs.next();
subjects[0] = rs.getString("sub1");
subjects[1] = rs.getString("sub2");
subjects[2] = rs.getString("sub3");
subjects[3] = rs.getString("sub4");
subjects[4] = rs.getString("sub5");
subjects[5] = "H.V";
tableModel.setColumnIdentifiers(new Object[]{"RollNo", "Name", subjects[0], subjects[1],
subjects[2], subjects[3], subjects[4], subjects[5]});
tableModel = (DefaultTableModel) StuMarks_TBL.getModel();
//I tried this after some help from internet
String classToGet = "";
if (chosenClass.matches("class12subjects")) {
classToGet = "XII";
} else if (chosenClass.matches("class11subjects")) {
classToGet = "XI";
}
Query = "select sd.rollno, name, sub1, sub2, sub3, sub4, sub5, sub6 "
+ "from stu_details sd join stu_marks sm "
+ "where sm.rollno = sd.rollno "
+ " and sd.optionalSubject='" + selectedGroup + "' and sd.class='"
+ classToGet + "';";
rs = st.executeQuery(Query);
i = 0;
while (rs.next()) {
tableModel.addRow(new Object[]{
rs.getString("rollno"),
rs.getString("name"),
rs.getString("sub1"),
rs.getString("sub2"),
rs.getString("sub3"),
rs.getString("sub4"),
rs.getString("sub5"),
rs.getString("sub6")});
//tableModel.setValueAt(1, 1, 4);
//When this is written, i am able to see 1 row in the output and then an array index out of exception
System.out.println(rs.getString("rollno")
+ rs.getString("name")
+ rs.getString("sub1")
+ rs.getString("sub2")
+ rs.getString("sub3")
+ rs.getString("sub4")
+ rs.getString("sub5")
+ rs.getString("sub6"));
}
}
我可以使用System.out.println打印输出面板中的所有详细信息。但它没有被添加到表中。
正如您所看到的 //tableModel.setValueAt(1, 1, 4); 附近的异常,即数组索引超出范围,显示一行(第零行)。我觉得这些行正在被添加,然后以某种方式被删除。我无法弄清楚。有人可以在这方面帮助我吗?
最佳答案
我不太确定您想要完成什么,因为您的代码片段没有透露所有必要的数据。您的问题实际上是两个问题,如何向表格添加一行以及如何打印表格的内容。所附代码是我编写的一种方法,用于完成其他任务,该方法已被编辑以删除多余的 Material 并使表格通用。它将创建一个包含 5 列和 6 行数据的表,可以添加或删除行,并使用 System.out.println(….) 打印出每行所有元素的内容;作为单独的线路。我希望这个对你有用。将代码导入到 IDE 中,您可以根据需要编译、执行和编辑它。R·米切尔
导入java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
class ModelJTable extends JFrame {
/**
* This application will create a table with 5 columns (0 to 4) and 6 rows
* (0 to 5). It will allow the removal of any or all rows individually. It
* will add row(s) as determined by commenting/uncommenting code. It will
* print the contents of all of the displayed rows as individual lines.
* That is:
* line 0, column 0 (line feed) line 0, column 1 (line feed) etc. Some of
* the comments are probably not applicable and most were for my
* information when I wrote the app.
*/
/**
* class variables
*/
public DefaultTableModel model;
public JTable table;
/**
* Table rows redefined to match column names. Not required. Automatically
* appends nulls.
*/
String[] rowZero = {"R0-C0", "R0-C1", "R0-C2", "R0-C3", "R0-C4"};
String[] rowOne = {"R1-C0", "R1-C1", "R1-C2", "R1-C3", "R1-C4"};
String[] newRow; // undefined String[]
public ModelJTable() {
super();
/**
* Redefined column names.
*/
model = new DefaultTableModel();
model.addColumn("Column 0");
model.addColumn("Column 1");
model.addColumn("Column 2");
model.addColumn("Col 3");
model.addColumn("Col 4");
/**
* moved to class variable to demonstrate that the row entry can be
* defined as a class variable. String[] rowZero = {"R0-C0", "R0-C1",
* "R0-C2", "R0-C3", "R0C4"};
*/
// model.addRow(socrates);
model.addRow(rowZero);
/**
* moved to class variable to demonstrate that the row entry can be
* defined as a class variable. String[] rowOne = {"R1-C0", "R1-C1",
* "R1-C2", "R1-C3", "R1-C4"};
*/
model.addRow(rowOne);
String[] rowTwo = {"R2-C0", "R2-C1", "R2-C2", "R2-C3", "R2-C4"};
model.addRow(rowTwo);
String[] rowThree = {"R3-C0", "R3-C1", "R3-C2", "R3-C3", "R3-C4"};
model.addRow(rowThree);
String[] rowFour = {"R4-C0", "R4-C1", "R4-C2", "R4-C3", "R4-C4"};
model.addRow(rowFour);
String[] rowFive = {"R5-C0", "R5-C1", "R5-C2", "R5-C3", "R5-C4"};
model.addRow(rowFive);
/**
* emptyRow elements must be "" NOT "null" or any other string.
*/
// String[] emptyRow = {"", "", "", "", ""};
// model.addRow(emptyRow);
table = new JTable(model, (TableColumnModel) table);
TableColumn nameColumn = table.getColumnModel().getColumn(0);
nameColumn.setPreferredWidth(75);
TableColumn surNameColumn = table.getColumnModel().getColumn(1);
surNameColumn.setPreferredWidth(75);
TableColumn datesColumn = table.getColumnModel().getColumn(2);
datesColumn.setPreferredWidth(300);
TableColumn column4 = table.getColumnModel().getColumn(3);
column4.setPreferredWidth(30);
TableColumn column5 = table.getColumnModel().getColumn(4);
column5.setPreferredWidth(30);
JButton quitButton = new JButton("Quit");
quitButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
});
JButton printTableButton = new JButton("Print Table");
printTableButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
printFile(); // go to print file method
}
});
JButton addButton = new JButton("Add Row");
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
addNewRow();
}
});
JButton removeButton = new JButton("Remove Row");
removeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
try {
model.removeRow(table.getSelectedRow());
} catch (Exception e) {
System.out.println("Nothing selected to remove.");
}
}
});
JPanel inputPanel = new JPanel();
inputPanel.add(quitButton);
inputPanel.add(printTableButton);
inputPanel.add(addButton);
inputPanel.add(removeButton);
JPanel southernPanel = new JPanel();
Container container = getContentPane();
container.add(inputPanel, BorderLayout.SOUTH);
container.add(southernPanel, BorderLayout.NORTH);
container.add(new JScrollPane(table), BorderLayout.CENTER);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(600, 600);
this.setUndecorated(true);
this.setResizable(false);
this.setLocationRelativeTo(null);
setVisible(true);
} // end of public ModelJTable() method
public void addNewRow() {
String[] addRow = {"New Row", "New Row", "New Row", "New Row",
"New Row"};
model.addRow(addRow);
}
/**
* public static void main(String args[]) { new ModelJTable(); } // end of
* main()
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ModelJTable().setVisible(true);
}
});
}
public void printFile() {
int rowCount = model.getRowCount(); // rowCount is decimal (1 to X)
int columnNumber = 0;
int rowNumber = 0;
String rowElement = "";
// System.out.println("Printing the rows of the table.");
// System.out.println("rowCount = " + rowCount);
/**
* Row numbering is zero to X. rowCount is decimal (1 to X).
*/
int elementNumber = 0; // initialize elementNumber
/**
* There are 5 elements (0 to 4) in each row. There are rowCount rows (1
* to rowCount) in the table. Therefore there are rowCount * 5 elements
* to be printed.
*/
int endOfLoop = 5 * rowCount;
//System.out.println("Number of elements in the table = " + endOfLoop);
for (int i = 0; i < endOfLoop; i++) {
System.out.println(model.getValueAt(rowNumber, elementNumber)
.toString());
if (elementNumber == 4) {
elementNumber = 0;
rowNumber++;
} else {
elementNumber++;
}
}
}
} // end of class ModelJTable
关于java - DefaultTableModel 中的 addrow 方法不添加行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51496151/
我有一个 jTable,显示一个简单的两列 SQL 表的数据并允许用户维护该列表。这是我的第一个java程序。使其正常工作,以便用户可以编辑数据列表并按“保存”进行更新。我从这行代码获取 jTable
由于某种奇怪的原因,每次我在任何单元格中编辑数据并确认它时一旦我进入下一个,它就会从之前编辑的单元格复制数据 有什么想法吗? public class CheckoutTableModel exten
我有3个类(class) 首先从数据库获取数据 第二个为共同作品 其他用于展示表。 public class TableContent { private final Vector headers;
我的 DefaultTableModel 有问题,它不会向我显示表中的列,有一部分代码: JTable table = new JTable() { public boolean is
我有这个测试文件 text_file我的 TableView 是 enter image description here我想将每一行与每一列相匹配(第一行-第一列,第二行-第二列,等等。)错误在哪里
如何在 DefaultTableModel dtm = new DefaultTableModel(); 上添加标题和数据而不放置 new DefaultTableModel(在此内部)?我尝试使用
我的 Java GUI 中显示了一个表,用户可以通过单击“添加”按钮向其中添加行。添加到表格的行中的单元格默认都是可编辑的,用户可以根据需要选择每一行/单元格。 我现在想要添加从表中删除行的功能,但我
我有数据关系 Person-Attends-Course Person ------- id: integer primary key name: string prename: string age
我正在制作一个 GUI 简单的日历程序。我使用 DefaultTableModel 和 DefaultTableCellRenderer 显示日历的月 View 。我的日历设置为突出显示今天的日期。我
新数据输入数据库后,我的 JTable 没有刷新。我需要终止并再次执行才能看到结果。我包括了 DefaultTableModel 和 fireTableDataChanged。我还错过了什么?谢谢!
http://codepaste.net/ujhdq2 private Connection Econn; private DefaultTableModel examTable =
我使用 SwingWorker 根据数据库中的更改更改 DefaultTableModel。我的问题是:在 doInBackground() 中向 DefaultTableModel 添加 ListS
更新了问题,具体问题是数据没有显示,因为没有列: run: [java] Aug 04, 2014 8:17:00 PM net.bounceme.dur.client.gui.Applic
我一直在尝试将一些数据从 Editable JComboBox 发送到 JXTable。它的代码如下: private void selectTestActionPerformed(java.awt.
我有一个用 Object[][] 数组填充的 DefaultTableModel。 现在我想添加一个带有复选框的列并相应地执行操作。 当我将复选框添加到 Object[][] 数组并查看它时,我会显示
这个类与我的数据库通信检索数据并将它们投影到 JTable。我使用了 DefaultTableModel 但列名不会出现。我在另一个类中实例化这个类,我通过 检索包含数据的表获取表格()。 packa
我正在使用 Java Swingx 框架。我的 DefaultTableModel 对象中有 4 列。我只想显示其中 3 列。但是,我需要全部四个来进行计算。 实际数据模型 S.No. |身份证 |
我在 NetBeans 中使用 DefaultTableModel 来显示 MySQL 数据库中的记录。我的数据能够显示,但我想要的是在表格末尾显示一个复选框列。 我知道它需要被覆盖,但我不知道如何以
List myProducts = getMyProducts();//create an arraylist; Vector dataVector = new Vector(myProducts);
是的,我知道,这听起来很愚蠢。但在此之前,让我先说明一下我的问题。 我有一个带有大量 JTable 的 GUI。我有各种 DefaultTableModel,每个 JTable 一个。所以,1:1。对
我是一名优秀的程序员,十分优秀!