java - JTable 不显示

标签 java swing jtable abstracttablemodel

在我的应用程序中,一切都是分布式的。

  • 在执行操作时,应用程序从数据库中检索数据并保存在 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。

enter image description here

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/

相关文章:

java - RSA加解密: BadPaddingException : Data must start with zero

java - struts2中通过GET或POST控制action的方法

java - JTable : Adding one to a JPanel, 并且它不显示自身

java - 来自 TableModel 的 JTable - 将按钮添加到每一行

java - 动态规划 : Find largest diamond (rhombus)

java - DisplayMessageActivity 后退按钮使我的 Android 应用程序崩溃

java - 使用 DnD 创建图像

java - 图像渲染在框架之外?

java - 如何在 JTable 中按日期对记录进行排序?

java - 显示 java JTable 中的特定行