我正在使用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);
}
}
}
我希望这个表总是占用面板的整个宽度(插图除外)。目前,在调整帧大小时,表格不会改变大小。
答案 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)
c
是GridBagConstraint
或类似的东西?最简单的方法是将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;