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

汤玛士

很难描述会发生什么,所以这里是SSCCE:

public class TableInScrollPaneTest {


    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TableInScrollPaneTest();
            }
        });
    }

    public TableInScrollPaneTest() {

        JFrame frame = new JFrame();
        frame.setSize(300, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);

        LayoutManager layout;

        layout = new MigLayout("wrap 1, fill", "fill, grow", "[fill, grow 1][fill, grow 2]");
        //layout = new GridLayout(2,1);

        JPanel panel = new JPanel(layout);


        JPanel placeHolder = new JPanel();
        JPanel placeHolder2 = new JPanel();
        placeHolder.setBackground(Color.GRAY);
        placeHolder2.setBackground(Color.LIGHT_GRAY);

        JTable table = this.createTable();
        JScrollPane tableScrollPane = new JScrollPane(table, 
                JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        //table.setPreferredScrollableViewportSize(new Dimension(5000,200));

        panel.add(placeHolder, "");
        panel.add(tableScrollPane, ""); 
        //panel.add(placeHolder2, "");

        frame.setContentPane(panel);
        frame.setVisible(true);
    }

    private JTable createTable() {

        String[] columnNames = "Name 1,Name 2,Name 3,Name 4,Name 5".split(",");

        int rows = 30;
        int cols = columnNames.length;
        String[][] data = new String[rows][cols];

        for(int i=0; i<rows; i++) {
            for(int j=0; j<cols; j++) {
                data[i][j] = "R"+i+" C"+j;
            }
        }
        JTable table = new JTable(data, columnNames);

        return table;
    }


}

我希望当用户调整框架大小时,scrollPane使用所有可用空间。但此外,我还希望另一个面板(placeHolder)能够增长。例如,将框架的高度除以3,则placeHolder将获得1部分,而scrollPane将获得2部分。GridLayout可以满足我的需求,但是我正在寻找MigLayout的解决方案。

如果您取消注释panel.add(placeHolder2, "");并在上面的行中添加注释,它将起作用。


EDIT1:
我尝试使用sizegroup约束。现在placeHolder和scrollPane具有相同的大小,但是我希望scrollPane占用两倍的空间。(此外,在我的程序中,我没有这样的占位符,但是有一些标签,复选框和文本字段。因此sizegroup可能不是我所需要的,除非有更多使用方式)

汤玛士

我在这里找到了解决方案:
MigLayout被JScrollBar对象中包含的JTable对象所混淆

在这里:
如何设置JScrollPane只显示单独的行

table.setPreferredScrollableViewportSize(null);

要么

table.setPreferredScrollableViewportSize(table.getPreferredSize());


我不知道这段代码片段之间有什么区别,但是它们都可以满足我的需求。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过JScrollPane填充JTable

来自分类Dev

Swing MigLayout无法增长填充列以填充容器长度

来自分类Dev

Swing MigLayout无法增长填充列以填充容器长度

来自分类Dev

JScrollPane中的IntelliJ JTable

来自分类Dev

固定宽度的JScrollPane中的JTable

来自分类Dev

如何在MigLayout中删除JPanel填充?

来自分类Dev

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

来自分类Dev

在包含JTable的JScrollPane中未调用TableModel

来自分类Dev

JTable标头未显示在JScrollPane中

来自分类Dev

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

来自分类Dev

MigLayout限制JScrollPane上JList的滚动

来自分类Dev

获取JTable的JScrollPane

来自分类Dev

访问包含JTable的JScrollpane

来自分类Dev

JScrollPane不会将滚动条添加到动态增长的表中

来自分类Dev

JEditorPane填充JScrollPane中的所有可用空间

来自分类Dev

MigLayout用于设计android窗体

来自分类Dev

用于设计android Forms的MigLayout

来自分类Dev

JScrollPane边框与JTable边框重叠

来自分类Dev

miglayout 中的相对布局

来自分类Dev

填充表格时如何在jtable中设置图标?

来自分类Dev

jtable 只用链表中的值填充一行

来自分类Dev

使div填充其余的父母并随着内容的增长而增长

来自分类Dev

给定对象填充JTable

来自分类Dev

从Swingworker线程填充jTable

来自分类Dev

尽管添加了JScrollPane,但JList视图区域仍在增长

来自分类Dev

将JTable添加到JScrollPane

来自分类Dev

JScrollPane-如何显示JTable标头?

来自分类Dev

Java jTable在jScrollPane内部不可见

来自分类Dev

添加JScrollPane后JTable不显示