在我的应用程序中,一切都是分布式的。
- 在执行操作时,应用程序从数据库中检索数据并保存在
ArrayList<T>
中. 我创建了一个
RelativeTableModel
的对象我通过ArrayList<T>
的地方.public void RelationsClicked() { ArrayList<Relation> data = myParent.dbOperation.getRelations(); RelativeTableModel tModel = new RelativeTableModel(data); // subclass of AbstractTableModel myParent.SetBrowsePanelData(tModel); myParent.SetMainPanel(CashAccountingView.BROWSEPANEL); }
- 我有一个
BrowseListPanel
具有JTable
的类在JScrollPane
.它的实例已在主应用程序中创建。 - 我将模型传递给
BrowseListPanel
最后显示面板。
- 我有一个
代码:
public void SetBrowsePanelData(AbstractTableModel tModel) {
browsePanel.setTModel(tModel);
}
// BrowseListPanel's Code
public void setTModel(AbstractTableModel tModel) {
this.tModel = tModel; // tModel = AbstractTableModel
}
// Show the Panel
public void SetMainPanel(String panel) {
activePanel = panel;
SetFontSize();
cards.show(mainPanel, panel);
mainPanel.revalidate();
mainPanel.repaint();
}
但我没有看到 Table
.我相信作为BrowseListPanel
的对象(包含 JTable
)已经创建 & 后来 TableModel
被添加。所以应该在 setTModel()
中触发某种事件.
我说的对吗?如果是这样,应该抛出什么事件,它的实现应该是什么。
最佳答案
调用 setModel()
在 table 上应该足够了,但您可以明确地在模型上调用 fireTableStructureChanged()
作为帮助解决问题的方法。
此外,确认您正在处理 event dispatch thread .
附录:这是一个显示基本方法的 sscce。
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
/** @see http://stackoverflow.com/questions/8257148 */
public class SwapTableModel extends JPanel {
public SwapTableModel() {
final JTable table = new JTable(Model.Alpha.model);
table.setPreferredScrollableViewportSize(new Dimension(128, 32));
this.add(new JScrollPane(table));
final JComboBox combo = new JComboBox();
for (Model model : Model.values()) {
combo.addItem(model);
}
this.add(combo);
combo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Model model = (Model) combo.getSelectedItem();
table.setModel(model.model);
}
});
}
private enum Model {
Alpha(), Beta();
private DefaultTableModel model;
private Model() {
Object[] data = {this.toString()};
this.model = new DefaultTableModel(data, 1);
model.addRow(data);
}
}
private void display() {
JFrame f = new JFrame("SwapTableModel");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new SwapTableModel().display();
}
});
}
}
关于java - JTable 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8257148/