【问题标题】:JTable Not Showing Up In JPanelJTable 没有出现在 JPanel 中
【发布时间】:2013-07-22 02:47:50
【问题描述】:

我正在尝试使用 DefaultTableModel 使用在 colName 中定义的列标题创建一个 JTable,然后将该表添加到 JScrollPane,然后再添加到 JPanel。但是,当我将面板添加到我的 JFrame 时,只显示面板,而不显示表格。我在另一个表中使用了类似的代码,并且显示得很好,唯一的区别是列数和变量名。

我错过了什么?

我的代码:

    //Column Names
    final String[] colNames = {"Item", "Count"};
    DefaultTableModel dtm = new DefaultTableModel(0, colNames.length);

    //Panel to hold Table
    JPanel j = new JPanel(new BorderLayout());
    j.setBounds(9, 78, 267, 254);

    //Colored to see if the panel has been added
    j.setBackground(Color.RED);

    //Set Column Headers
    dtm.setColumnIdentifiers(colNames);

    //Jtable with model
    JTable t = new JTable(dtm);
    t.setBackground(Color.GREEN);

    t.getTableHeader().setReorderingAllowed(false);
    t.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);

    t.getColumnModel().getColumn(0).setPreferredWidth(113); 
    t.doLayout();

    j.add(new JScrollPane(t), BorderLayout.CENTER);

【问题讨论】:

  • 由于您使用的是 JScrollPane,无需将组件直接传递给它,请尝试创建 JScrollPane 的新实例并使用 setViewPort() 方法传入您的 JTable。例如 myScrollPane.getViewport().setViewPortView(t)
  • 结合你的和 MadProgrammer 的解决方案是有效的。

标签: java swing jtable jpanel jtableheader


【解决方案1】:

我建议该列被表模型报告的那些覆盖。你可以改用...

String[] colNames = {"Item", "Count"};
DefaultTableModel dtm = new DefaultTableModel(colNames, 0);

JPanel j = new JPanel(new BorderLayout());

JTable t = new JTable(dtm);
t.setBackground(Color.GREEN);

t.getTableHeader().setReorderingAllowed(false);
t.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);

t.getColumnModel().getColumn(0).setPreferredWidth(113); 

j.add(new JScrollPane(t), BorderLayout.CENTER);

相反...

没有看到您用来将表格放在框架上的代码,很难进一步评论,但是...

  • 避免使用setBounds,在这种情况下无论如何都是没有意义的。
  • 背景颜色实际上将更多地由视口定义,然后是表格或面板,直到表格被配置为填充空白空间或有足够的行来填充空白空间

【讨论】:

  • 将您的解决方案和 dinukadev 的解决方案结合起来,稍加调整就为我解决了。我创建了一个 JScrollPane 实例并将视图设置为表并将其添加到我的 JFrame。
猜你喜欢
  • 1970-01-01
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
相关资源
最近更新 更多