在面板内安装JTable

时间:2011-05-18 20:35:24

标签: java swing jtable

我正在使用JTable并将其添加到使用gridbaglayout的面板中,如下所示:

JTable qdbs = new JTable(rowData, columnNamesVector);
qdbs.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);

panel.add(qdbs, c);

我不希望表格在滚动窗格中,但我确实希望表格占据面板的整个宽度。我该如何做到这一点?

根据要求提供SSCCE:

import javax.swing.*;
import java.awt.*;

public class Main{

    public static void main(String[] args) {
    new TestFrame();
    }

    public static class TestFrame extends JFrame{
    public TestFrame() {
        this.setTitle("SSCCE");

        JPanel panel = new JPanel();
        panel.setLayout(new GridBagLayout());

        GridBagConstraints c = new GridBagConstraints();

        c.gridx = 0;
        c.gridy = 0;

        c.insets = new Insets(10,10,10,10);
        JTable testTable = new JTable(10,2);
        panel.add(testTable, c);

        this.add(panel);
        this.pack();
        this.setVisible(true);
    }
    }

}

我希望这个表总是占用面板的整个宽度(插图除外)。目前,在调整帧大小时,表格不会改变大小。

6 个答案:

答案 0 :(得分:12)

您需要添加约束来告诉布局如何处理更多空间。在您的SSCCE中添加以下项目:

  c.fill = GridBagConstraints.BOTH;
  c.weightx = 1;
  c.weighty = 0;

答案 1 :(得分:5)

import java.awt.*;
import javax.swing.*;

public class Test
{
    public static void main(String args[]) throws Exception
    {
        JPanel panel = new JPanel( new GridBagLayout() );
        JTable table = new JTable(5, 5);
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.weightx = 1.0;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        panel.add(table, gbc);

        JFrame frame = new JFrame();
        frame.add(panel, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }
}

如果您需要更多帮助,请发布显示问题的SSCCE

答案 2 :(得分:4)

我想,

cGridBagConstraint或类似的东西?最简单的方法是将LayoutManager的{​​{1}}设置为JPanel,然后使用约束BorderLayout添加。

答案 3 :(得分:4)

嗯嗯

Alex Bliskovsky写了panel.add(qdbs, c);

那是错的,不是,从来没有这样做,你忘记将JTable包裹到ScrollPane,然后你可以使用LayoutManagers的一些内容,对于LayoutManagers check {的相关示例{3}} GridBagConstraints

答案 4 :(得分:4)

调整帧大小时,以下帧将正确调整表的大小。

public class Sandbox {

public static void main(String[] args) {
    new TestFrame();
}

public static class TestFrame extends JFrame {
    public TestFrame() {
        this.setTitle("SSCCE");

        JPanel panel = new JPanel();
        panel.setLayout(new GridBagLayout());

        GridBagConstraints c = new GridBagConstraints();

        c.gridx = 0;
        c.gridy = 0;

        c.insets = new Insets(10, 10, 10, 10);
        c.fill = GridBagConstraints.BOTH;
        c.weightx = 1;
        c.weighty = 1;
        JTable testTable = new JTable(10, 2);
        panel.add(testTable, c);

        this.add(panel);
        this.pack();
        this.setVisible(true);
    }
}

}

答案 5 :(得分:3)

也许是:

GridBagConstraints.fill = GridBagContraints.BOTH;