Java的的setBounds不工作的JPanel(Java setBounds not worki

2019-07-04 06:22发布

我在做Java中的一个小贵。 我使用的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);

当我添加按钮的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);

请帮我在这小问题

Answer 1:

问题是,当你使用绝对定位, 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);

从这样做没有布局管理器

尽管可能没有布局管理器做的,你应该使用一个布局管理器,如果在所有可能的。 布局管理可以更容易地调整到外观和感觉相关的组件出场,以不同的字体大小,以容器的大小变化,以及不同的语言环境。

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

见视觉引导布局管理器 。



Answer 2:

你必须摆脱JPanel的布局,以设置绝对位置:

p.setLayout(NULL);



文章来源: Java setBounds not working with JPanel