5

我正在用 java 做一个小 Gui。我正在使用 setBounds 方法在我的 JFrame 上设置按钮等的位置,但问题是当我将它与 JPanel 一起使用时,按钮在 JFrame 上不可见,并且没有 JPanel 它很好,请查看两个代码并请帮助我我是初学者,面临这些愚蠢的问题。

这个工作正常

  JFrame jframe = new JFrame("Working Fine");  
  jframe.setLayout(null);  
  JButton jbutton = new JButton("Position Test");  
  jbutton.setBounds(0, 0, 100, 100);  
  jframe.add(jbutton);  
  jframe.setSize(300,300);
  jframe.setVisible(true);

当我将 Button 添加到 Jpanel 时相同的代码然后它不起作用所以有什么问题,请指导我

  JFrame jframe = new JFrame("causing problem ");
  jframe.setSize(300,300);
  JPanel p = new JPanel();
  jframe.setLayout(null);  
  JButton jbutton = new JButton("Position Test");  
  jbutton.setBounds(0, 0, 100, 100);
  jframe.add(p);
  p.add(jbutton);
  p.setVisible(true);
 //jframe.add(jbutton);  
  jframe.setVisible(true);

请帮我解决这个小问题

4

2 回答 2

11

您必须摆脱 JPanel 的布局,才能设置绝对位置:

p.setLayout(null);

于 2013-06-13T00:16:02.433 回答
7

问题是当你使用绝对定位时,JPanel组件没有默认大小所以不会出现。为了让它出现,你可以做

JFrame frame = new JFrame("No Problem");
JPanel panel = new JPanel() {
    @Override
    public Dimension getPreferredSize() {
        return new Dimension(300, 300);
    };
};
panel.setLayout(new FlowLayout(FlowLayout.CENTER));
JButton button = new JButton("Position Test");
panel.add(button);
frame.add(panel);
frame.pack();
frame.setVisible(true);

没有布局管理器的情况下

尽管可以不使用布局管理器,但您应该尽可能使用布局管理器。布局管理器可以更轻松地适应依赖外观的组件外观、不同的字体大小、容器的不断变化的大小以及不同的语言环境。

布局管理器的选择将取决于您希望如何布局组件。

请参阅布局管理器的视觉指南

于 2012-11-29T19:51:20.963 回答