我使用GridBagLayout作为JFrame布局。无论我写什么,我的元素都没有显示出来。除了GridBagLayout之外,请不要给出任何使用的答案(对不起,如果它听起来很粗鲁)
JPanel Panel;
JButton insertButton = new JButton("Insert");
GridBagConstraints gbc;
public MainFrame() {
this.setTitle("JAVA & MySQL");
this.setVisible(true);
this.setBounds(500, 100, 600, 600);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
Panel = new JPanel(new GridBagLayout());
Panel.setOpaque(true);
Panel.setBackground(Color.BLUE);
gbc = new GridBagConstraints();
gbc.weightx = 1;
gbc.weighty = 1;
gbc.anchor = GridBagConstraints.CENTER;
gbc.gridx = 1;
gbc.gridy = 1;
gbc.insets = new Insets(0, 10, 0, 0);
gbc.fill = GridBagConstraints.BOTH;
Panel.add(insertButton, gbc);
}
答案 0 :(得分:2)
你的代码不明确是什么(这是你的框架类中的代码)并且你选择的名字很差。按照惯例,字段名称应以小写字母开头(以区别于类名)。
看来你永远不会将你的面板添加到框架中,也不会打包()框架。
改变这样的代码:
public MainFrame() {
this.setTitle("JAVA & MySQL");
// setting visible should come last!
//this.setVisible(true);
this.setBounds(500, 100, 600, 600);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
Panel = new JPanel(new GridBagLayout());
Panel.setOpaque(true);
Panel.setBackground(Color.BLUE);
gbc = new GridBagConstraints();
gbc.weightx = 1;
gbc.weighty = 1;
gbc.anchor = GridBagConstraints.CENTER;
gbc.gridx = 1;
gbc.gridy = 1;
gbc.insets = new Insets(0, 10, 0, 0);
gbc.fill = GridBagConstraints.BOTH;
Panel.add(insertButton, gbc);
// put the panel into the frame!
setLayout(new BorderLayout());
add(Panel, BorderLayout.CENTER);
pack();
setVisible(true);
}
答案 1 :(得分:2)
问题是您没有将面板添加到顶级容器的内容窗格中。致电pack()
以实现目标。
此外,正如@MaddProgrammer在评论中所说,您应该在添加所有组件后调用setVisible()
和revalidate()
方法,否则您必须致电repaint()
和setBounds()
为了验证组件层次结构。
根据Container#add(Component comp)文档:
此方法更改与布局相关的信息,因此, 使组件层次结构无效。 如果容器已经存在 显示后,必须在此后验证层次结构 显示添加的组件。
此外,您不应该混合绝对布局调用,例如setLocation()
,setSize()
或input.cmn-toggle-round-flat + label:after {
content: "C";
line-height: 36px;
text-align: center;
top: 2px;
left: 2px;
bottom: 2px;
width: 36px;
color: #fff;
border-radius: 36px;
transition: margin 0.2s, background 0.2s;
}
(只是避免它们)和布局管理器(强烈建议这些调用)< / p>