JPanel中的JTable设置自己的边框并修复大小

时间:2014-08-09 16:07:37

标签: java swing jtable jpanel layout-manager

我正在尝试学习Java并使用GUI作为升级到" booring" C \ C ++
我有两个面板,其中一个带有输入表单,其中一个带有一个表,用于显示我从输入表单加载的内容。

但不知道为什么,表扩展并有边框线,而且,它有一个固定的大小,每当我展开窗口时,表保持不变。

" mainFrame" (调用c&#tor;文件的文件)只是启动表格并将其添加到布局中,所以我确定它不会发生在那里......

我已经添加了JTable类代码和一张显示发生了什么的图片

如果链接显示太小,则显示链接:http://oi62.tinypic.com/ok4hs5.jpg

enter image description here

代码:

    import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class TableOutput extends JPanel {
    private static final long serialVersionUID = 1L;
    private JTable jt;

    public TableOutput() {
        String[] columns = {"Product ID" , "Date" , "Name" , "Address" , "Status"};
        String[][] data = {};
        jt = new JTable(data,columns);
        jt.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
        JScrollPane jsp = new JScrollPane(jt, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

        add(jsp);
    }

1 个答案:

答案 0 :(得分:2)

  

但不知道为什么,表扩展并有边框线,而且,它有一个固定的大小

  • 尺寸 - 执行System.out.println(table.getPreferredScrollableViewportSize())。这是滚动窗格调用以获取表视图的首选大小的方法。您将看到默认值为450x400。您可以通过覆盖表格上的getPreferredScrollableViewportSize()来更改它。

    JTable table = new JTable() {
        public Dimension getPreferredScrollableViewportSize() {
            return new Dimension(300, 300);
        }
    };
    
  • border - 这不是表格边框。它实际上是滚动窗格边框。

  

每当我展开窗口时,表格保持不变。

JPanel具有默认FlowLayout,它始终遵循所包含组件的首选大小。如果您希望使用面板拉伸表/滚动窗格,请使用BorderLayout之类的布局管理器,它将忽略首选大小并拉伸以适合。请记住,如果面板包含在具有FlowLayout的容器中,您仍将获得当前结果。如果面板刚刚添加了默认BorderLayout的框架,那么你应该没问题。请点击How to use Layout Managers

了解更多信息

注意:您可能会发现,如果您要将布局设置为BorderLayout,则滚动窗格的首选大小将不起作用。这将留下相同的结果 - 表格会很大,有空行和边框。