- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 JFrame
,我在其中构建 JTable
。
JTable
分两步制作:
我创建了一个函数 initTable()
来制作表格
我创建了另一个函数 initDataintoTable()
,它将数组列表中的数据广告到我的表中。
到目前为止一切正常。当我尝试更新我的 JTable
时,问题就出现了。事实上,我打开一个 JDialog
并尝试列表中的一个新项目。我已经到了用新项目修改 Arraylist 的地步,但之后我无法更新我的表,我真的不知道将 fireTableDataChanged() 放在哪里code> 例如,以及如何在需要时调用它。
在 initDataintoTable 中,我向我的 DefaultTableModel 表模型添加了一个 TableModelListener。
protected void initDataIntoTable() {
tablemodel.setRowCount(0);
for (//every item on my list) {
String[] row = {dataitem, dataitem2};
tablemodel.addRow(row);
}
TableModelListener myjtable_listener = new TableModelListener() {
public void tableChanged(TableModelEvent e) {
// I have to write something here to update my table ?
// I don't know if it's here where I have to update my table and if it is, how should I call this listener from the place I want to update ?
tablemodel.fireTableDataChanged(); // ?
}
};
table.getModel().addTableModelListener(jtable_listener);
//tablemodel.addTableModelListener(myjtable_listener);
}
}
在我的 jDialog 中,“确定”按钮上有一个 ActionListener:
class OKButton implements ActionListener {
public void actionPerformed(ActionEvent e) {
// Here I manage to get my updated list of objects
// What should I call here to update my jtable ?
}
}
okbutton.addActionListener(new OKButton());
我已经在这个网站上看到了一些问题,但我尝试过的任何方法都不适用于我的程序。感谢您的帮助,并对我的英语感到抱歉。
最佳答案
您永远不必显式调用 fireTableDataChanged
方法,因为它取决于 TableModel当数据发生更改(插入/更新/删除)时通知 View 的实现。
在您的情况下,调用 tablemodel.addRow(...)
就足够了:表 model 将通知 查看数据已更改,最后一个数据将更新。
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
...
((DefaultTableModel)table.getModel()).addRow(...);
...
}
};
您在评论中指出:
I can't do
jframe.getTable()
without having getTable static, and I can't getgetTable()
static without making table static. After doing this, my program works just like I wanted to.
如果您必须添加 static
修饰符才能使其正常工作,那么您就会遇到设计问题。您的代码中可能存在变量范围问题。请参阅下面的示例:InputDialog
是一个不同的类,它保存对表模型的引用,没有任何static
变量。
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
public class Demo {
private void createAndShowGUI() {
DefaultTableModel model = new DefaultTableModel(new Object[]{"TimeStamp", "Value"}, 0) {
@Override
public Class<?> getColumnClass(int columnIndex) {
switch(columnIndex) {
case 0: return Date.class;
default: return super.getColumnClass(columnIndex);
}
}
};
final JTable table = new JTable(model);
JButton button = new JButton("Add entry...");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new InputDialog((DefaultTableModel)table.getModel()).createAndShowGUI();
}
});
JFrame frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(new JScrollPane(table), BorderLayout.CENTER);
frame.add(button, BorderLayout.SOUTH);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
class InputDialog {
private final DefaultTableModel model;
public InputDialog(DefaultTableModel model) {
this.model = model;
}
public void createAndShowGUI() {
final JTextField textField = new JTextField(10);
textField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model.addRow(new Object[]{new Date(), textField.getText()});
Window window = SwingUtilities.windowForComponent((Component)e.getSource());
window.dispatchEvent(new WindowEvent(window, WindowEvent.WINDOW_CLOSING));
}
});
JPanel panel = new JPanel();
panel.add(new JLabel("Please input a value and press ENTER key:"));
panel.add(textField);
JDialog dialog = new JDialog();
dialog.setModal(true);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.add(panel);
dialog.pack();
dialog.setLocationRelativeTo(null);
dialog.setVisible(true);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Demo().createAndShowGUI();
}
});
}
}
关于java - 使用 DefaultTableModel 时刷新 JTable 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22648359/
我有一个 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。对
我是一名优秀的程序员,十分优秀!