Java:展开JButton以填充Container

use*_*577 5 java swing jpanel jbutton

我有一个JButton我想扩展以填补JPanel持有它的大小.我尝试过几种不同的方式,没有运气.以下是一些尝试:

  1. 这里推荐的手动尺寸设置- 按钮尺寸没有变化.

    panel  = new JPanel(new CardLayout());
    button = new JButton();
    button.setPreferredSize(new Dimension(BUTTON_SIZE, BUTTON_SIZE)); 
    panel.add(button);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 试图用一个BorderLayout如在暗示扩大按钮在这里.尺寸没有变化.

    panel  = new JPanel(new BorderLayout());
    button = new JButton();
    panel.add(button, BorderLayout.CENTER);
    
    Run Code Online (Sandbox Code Playgroud)

我可能做错了什么,所以非常感谢任何帮助.

编辑

以下是解决问题的摘要.有两件事有效

  1. 删除LayoutManager(在调用中new JPanel),根据Oracle默认为BorderLayout.
  2. 在接受的答案中添加维度(即new BorderLayout(0,0)).

The*_*111 6

您的第二次尝试应该有效,但这并不意味着您的整个顶级容器将由JPanel包含您的JButton.当BorderLayout容器中没有其他组件时,中心组件将展开以填充整个容器.

http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html

如果窗口被放大,则中心区域将获得尽可能多的可用空间.

您可以发布运行应用时所看到的图像吗?以下是一个工作示例.值得注意的是,每个容器一直到顶部JFrame也在使用BorderLayout.在您的尝试中,某些上层容器可能会限制您的尺寸JPanel,因此也会限制内部尺寸JButton.

frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel = new JPanel();
panel.setLayout(new BorderLayout(0, 0));
JButton button = new JButton("I'm a button!");
panel.add(button);

frame.getContentPane().add(panel, BorderLayout.CENTER);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述