将不带布局的面板添加到BorderLayout的北部

Dum*_*s45 1 java layout swing border-layout absolutelayout

同事。

我正在尝试用Java构建简单的GUI,其中JFrame具有Border Layout。我想将带有JTable的JScrollPane放到CENTER,将没有布局的JPanel放到NORTH。

问题是JPanel不可见。这个问题有一个简单的例子:

JFrame frame = new JFrame("Test frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JButton button = new JButton("Test button");
button.setBounds(10, 10, 40, 20);

JPanel panelN = new JPanel(null); // layout = null, panelN without layout
panelN.add(button);
frame.add(panelN, BorderLayout.NORTH);

JTable table = new JTable(new DefaultTableModel(4, 4));
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);

frame.setSize(400, 400);
frame.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

nac*_*okk 5

您必须使用LayoutManager。不建议不要使用layoutManager,但是如果要这样做,也必须将其设置panel.setBounds(..)为面板。

默认情况下,JPanelFlowLayout所以如果你把

JPanel panelN = new JPanel(); // FlowLayout used 
panelN.add(button);
frame.add(panelN, BorderLayout.NORTH);
Run Code Online (Sandbox Code Playgroud)

因此您的框架将如下所示。

例

布局管理器确定容器中组件的大小和位置。尽管组件可以提供大小和对齐提示,但是容器的布局管理器对容器中组件的大小和位置拥有最终决定权。

强烈建议使用该原因,例如,如果您必须调整组件的大小或以不同的分辨率显示,则可以将此工作委托给布局管理器