我有问题。我对Java
很新,目前我尝试学习一些基本的东西。
所以我用GUI
vor输入和Textfield
创建了一个小Button
,用查询(包含输入作为变量)向我的数据库发出查询。
我在ResultSet
填充了查询结果,并希望在JTable
中显示结果。
我试着这样做了:
public class AppWindow extends JFrame {
private ResultSet rs = null;
JTextField textfield_where_1;
JTextField textfield_where_2;
JTable tabellenspass;
JButton button;
public AppWindow() {
this.getContentPane().setLayout(null);
this.initWindow();
protected void initWindow()
{
// Instanzieren:
textfield_where_1 = new JTextField();
textfield_where_2 = new JTextField();
tabellenspass = new JTable();
button = new JButton("muh");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
Abfrage();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
// Positionen festlegen
textfield_where_1.setBounds(5,10,400,25);
tabellenspass.setBounds(5,40,400,100);
button.setBounds(300,110,100,30);
// Elemente dem Fenster hinzufügen:
this.getContentPane().add(textfield_where_1);
this.getContentPane().add(button);
this.getContentPane().add(tabellenspass);
this.pack();
}
public void Abfrage() throws Exception
{
// Eingabestrings holen
String eingabe1 = textfield_where_1.getText();
select_dies_das ausgabe = new select_dies_das();
rs = ausgabe.select(eingabe1);
Ausgabe_Tabelle(rs);
}
private void Ausgabe_Tabelle(ResultSet rs)
{
try
{
// Rows / Columns der Tabelle setzen
ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData();
// Tabellenmodel
DefaultTableModel model = new DefaultTableModel();
tabellenspass.setModel(model);
//model.fireTableRowsInserted(0, 5);
int columns = rsmd.getColumnCount();
// Resultset Zeiger zurueck setzen
rs.beforeFirst();
while (rs.next()) {
Object[] row = new Object[columns];
for (int i = 1; i <= columns; i++)
{
row[i - 1] = rs.getObject(i);
}
model.insertRow(rs.getRow() -1,row);
System.out.println("miau");
}
// tabellenspass.setModel(model);
tabellenspass.repaint();
}
catch(Exception e)
{
System.out.println(e);
}
}
使用Abfrage()
我得到填充的结果集,并使用Ausgabe_Tabelle()
填写JTable
,但显示的表格不会更改。
我创建了一行Object[]
,我用整行的Data
填充,Object
我插入JTable
。
使用initWinodw()
我创建了一个小GUI。
有人可以解释一下为什么表格在插入后不会刷新吗?
答案 0 :(得分:4)
我认为问题在于您的BiConsumer
未正确初始化,您需要使用TableModel
构造函数为其指定public DefaultTableModel(Object[][] data, Object[] columnNames){...}
:)
header
当然,您需要根据需要在DefaultTableModel model = new DefaultTableModel(null,new String[]{"Col1","Col2"});
添加或删除列,而model
语句也是不必要的,因为您已使用rs.beforeFirst();
检查{是否while loop
{1}}使用此ResultSet
的{{1}}方法生成另一行,如果您使用此语句,还会确认您的next()
是可滚动的,或者您将获得
interface
更好地评论这一行
ResultSet
此外,您可以使用此org.postgresql.util.PSQLException: Operation requires a scrollable ResultSet, but this ResultSet is FORWARD_ONLY.
更改//rs.beforeFirst();
声明
我已经尝试过您的代码,这就是结果
也许您应该考虑将model.insertRow(rs.getRow() - 1, row);
添加到model.addRow(row);
以保持JTable
可见,并将JScrollPane
设置为您的设计,类似这样
headers
答案 1 :(得分:0)
要通知JTable
有关更改,请使用fireTableDataChanged
:
通知所有侦听器表格行中的所有单元格值可能已更改。
您也可以尝试重新验证并重新绘制或resizeAndRepaint()
:
tabellenspass.revalidate();
tabellenspass.repaint();
或
tabellenspass.resizeAndRepaint();
并查看here以获取更多信息......