JTable没有显示
在我的应用程序中,一切都分布
- 在一个动作中,应用程序从DB中检索数据并保存在
ArrayList<T>
。 -
我创build一个
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); }
- 我有
JScrollPane
中有一个JTable
的BrowseListPanel
类。 它的实例已经在主应用程序中创build。 - 我将模型传递给
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
)的对象已经被创build,所以后来添加了TableModel
。 所以应该在setTModel()
触发某种事件。
我对吗? 如果是的话,应该抛出什么事件,应该怎样实施。
在表上调用setModel()
应该足够了,但是可以明确地在模型上调用fireTableStructureChanged()
作为一种帮助解决问题的方法。
另外,请确认您正在使用事件分派线程 。
附录:这是一个显示基本方法的简介。
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(); } }); } }