我的程序中有一个JTable。我想点击JButton后更新它。 我写了这个:
DefaultTableModel myTable = new DefaultTableModel(celDatas,celNames);
JTable source = new JTable(myTable){public boolean isCellEditable(int rowIndex, int colIndex) {
return false;}};
JScrollPane pane = new JScrollPane(source);
(...)
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
query = "Select sal FROM EMP";
myTable =(DefaultTableModel)source.getModel();
myTable.fireTableDataChanged();
}
问题是id不会更新JTable上的数据。 如何解决这个问题?
编辑: JTable通过JScrollPane显示在我的家伙中。 我现在做这个:
source = new JTable(myTable){public boolean isCellEditable(int rowIndex, int colIndex) {return false;}};
pane = new JScrollPane(source);
我还创建了一个新的空白,从数据库中获取数据+我在那里定义了myTable:
void queryConnection() {
(...)
myTable = new DefaultTableModel(celDatas,celNames);
}
我添加了一个JButton,它更新了我的JTable(当我们更改查询时。
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
query = "Select sal FROM EMP";
queryConnection();
}
}
=============================================== =================================
public class Application2 implements Runnable {
private JTable source;
private JScrollPane pane;
private DefaultTableModel myTable;
private JPanel panel;
private String[][] celDatas = null;
private String[] celNames = null;
public void run() {
(...)
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
if(...) {
query = "Select sal FROM EMP";
queryConnection();
}
}
if(query == null) {
query = "Select * from EMP";
queryConnection();
}
source = new JTable(myTable){public boolean isCellEditable(int rowIndex, int colIndex) {return false;}};
pane = new JScrollPane(source);
pane.setSize(f.getSize().width-60,300);
pane.setLocation(30,20);
panel.add(pane);
f.add(panel);
f.pack();
}
void queryConnection() {
//here is connection and downloading datas
myTable = new DefaultTableModel(celDatas,celNames);
}
我希望现在更方便吗? ;)
答案 0 :(得分:3)
如果您正在创建新的TableModel,则不需要调用任何fireXXX()
方法,但如果您基于AbstractTableModel编写TableModel,则主要需要调用这些方法(你不是)。
我认为你的问题出在其他地方。您似乎正在创建一个新的JTable并将其添加到新的JScrollPane。您是否将这些组件添加到GUI(您不显示)?如果是这样,您添加的容器是否能够顺利接受新组件?你重新验证并重新绘制容器吗?您新创建的JTable是否显示在GUI中?
或者,GUI中是否已显示JTable?如果是这样,也许你想要做的就是设置它的模型,而不是创建一个新的JTable。我赞成这个解决方案最简单。
编辑1
我会这样做:
setTableModel(...)
并传入我新创建的DefaultTableModel对象。 编辑2
Ganjira,为了让我们能够最好地帮助您,我们需要更好地了解问题,这就是为什么我要求对您的问题进行全面澄清或sscce,其中我已经既没见过。我理解你的问题的问题包括:
编辑3
你说:
JTable已经在GUI中,因为它显示了该程序的开头'。单击JButton后,我想更改JTable中的值。它并没有改变现有JTable的模型 - 它没有任何改变。
这让我感到困惑,因为最好的解决方案是我一直在提出的建议 - 不要创建新的JTable,而是创建一个新的DefaultTableModel并更改现有JTable的模型。你还没有提到为什么你没有尝试这个,或者如果你已经尝试过,它是如何不适合你的。