在包含JTable的JScrollPane中未调用TableModel

纪尧姆·罗伯(Guillaume Robbe)

我的Java GUI出现意外行为。我想创建一个JScrollPane包含,JTable然后将其添加JScrollPane到中Frame

这是代码:

public class UrlsScrollPanel extends JScrollPane {
private static final long serialVersionUID = 1L;

public UrlsScrollPanel() {

    //setup urls and collections
    ArrayList<URL> urls = URL.getAll();
    ArrayList<Collection> collections = new ArrayList<>();
    for(URL url : urls) collections.add(new Collection(url));

    //table
    String[] columns = {            
        "database",
        "status",
        "consumption",
        "last snapshot date",
        "last message",
        "details",
        "stop collect"
    };  

    AbstractTableModel dataModel = new AbstractTableModel() {
        private static final long serialVersionUID = 1L;

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            System.out.printf("row: %d, column: %d \n", rowIndex, columnIndex); //is never called.
            URL url = urls.get(rowIndex);
            Collection collection = collections.get(rowIndex); 
            ArrayList<Message> lastMessages = collection.getLastSnapshot().getMessages();
            Message lastMessage = lastMessages.get(lastMessages.size() - 1);

            if(columnIndex == 0) return url.toString();
            if(columnIndex == 1) return collection.getStatus(); 
            if(columnIndex == 2) return ConsumptionChart.getChartPanel(collection);
            if(columnIndex == 3) return collection.getLastSnapshot().getDate();
            if(columnIndex == 4) return String.format("[ %s ] %s", lastMessage.getDate(), lastMessage.getBody()); 
            return "Comming soon.";
        }

        @Override
        public int getRowCount() {
            return urls.size();
        }

        @Override
        public int getColumnCount() {
            return columns.length;
        }

        @Override
        public boolean isCellEditable(int row, int column) {
            return false;
        }
    };
    JTable table = new JTable(dataModel);
    add(table);
    setBackground(Color.red);
    setSize(500, 500);
}
}

这就是我所说的:

public static void main(String[] args) {        
    JFrame frame = new JFrame();
    frame.setVisible(true);
    frame.setResizable(true);
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH );
    frame.setLocationRelativeTo(null);
    UrlsScrollPanel panel = new UrlsScrollPanel();
    frame.add(panel, BorderLayout.CENTER);
    SwingUtilities.updateComponentTreeUI(frame);
}

结果是红色正方形在框的左上方闪烁,然后立即消失。dataModel似乎永远不会被调用。

非常感谢您对我做错的事情的帮助,感谢您的宝贵时间!

垃圾神

不要扩展 JScrollPane相反,使用yourtable构造一个JScrollPane

frame.add(new JScrollPane(table), BorderLayout.CENTER);

该方法在这里描述; 这里显示一个完整的例子; 用另一种方法setViewportView()进行检查这里

这两个不相似吗?

JScrollPane panel = new JScrollPane(); panel.add(table);
JScrollPane panel = new JScrollPane(table);

否。如“滚动窗格的工作原理”中所示,第一个公式将table直接添加到中JScrollPane,替换JViewport位于中居中位置ScrollPaneLayout且将用于显示的组件table第二个公式在setViewportView(table)内部调用,它告诉滚动窗格JViewport要显示组件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

关闭窗口时未调用Java Swing JTable TableModel setValueAt()

来自分类Dev

JTable标头未显示在JScrollPane中

来自分类Dev

访问包含JTable的JScrollpane

来自分类Dev

JScrollPane中的IntelliJ JTable

来自分类Dev

TableModel.fireTableCellUpdated(tableRowIndex,tableColumnIndex)未更新JTable中的单元格

来自分类Dev

使用ResultSet TableModel在JTable中设置getColumnClass

来自分类Dev

固定宽度的JScrollPane中的JTable

来自分类常见问题

在JTable / TableModel中编辑列的单元格限制

来自分类Dev

如何忽略 JTable 中 TableModel 的一列?

来自分类Dev

JScrollPane(用于JTable)在MigLayout中填充并增长

来自分类Dev

如何删除JScrollPane中JTable顶部的A?

来自分类Dev

如何使我的JTable / TableModel动态?

来自分类Dev

序列化JTable的TableModel

来自分类Dev

Django manytomany字段未包含在api调用中

来自分类Dev

检测 JScrollPane 中的 JTable 何时滚动接近底部

来自分类Dev

图像未显示在jtable中?

来自分类Dev

数据未显示在JTable中

来自分类Dev

获取JTable的JScrollPane

来自分类Dev

通过JScrollPane填充JTable

来自分类Dev

无法使用setValueAt使用自定义TableModel更改JTable中的值

来自分类Dev

TableModel.fireTableCellUpdated(tableRowIndex,tableColumnIndex)不更新JTable中的单元格

来自分类Dev

使用自定义TableModel和从文件中读取的项目列表时,如何更新jtable

来自分类Dev

更改TableModel时如何禁用JTable排序?

来自分类Dev

在jTable中添加包含数据的列

来自分类Dev

JScrollPane边框与JTable边框重叠

来自分类Dev

JTable中的JComboBox未显示选择

来自分类Dev

java - sql 结果未显示在 jTable 中

来自分类Dev

为什么JScrollPane中的此列表未对齐?

来自分类Dev

Eclipse中未解决的包含

Related 相关文章

热门标签

归档