我有JButton
我希望扩展以填充持有它的JPanel
的大小。我尝试过几种不同的方式,没有运气。以下是一些尝试:
建议的手动大小设置here - 按钮大小没有变化。
panel = new JPanel(new CardLayout());
button = new JButton();
button.setPreferredSize(new Dimension(BUTTON_SIZE, BUTTON_SIZE));
panel.add(button);
尝试使用BorderLayout
展开按钮,如here所示。尺寸没有变化。
panel = new JPanel(new BorderLayout());
button = new JButton();
panel.add(button, BorderLayout.CENTER);
我可能做错了什么,所以非常感谢任何帮助。
编辑
以下是解决问题的摘要。有两件事有效
new JPanel
的调用中),according to Oracle默认为BorderLayout。new BorderLayout(0,0)
)。 答案 0 :(得分:5)
您的第二次尝试应该有效,但这并不意味着您的整个顶级容器将由包含JPanel
的{{1}}填充。当JButton
容器中没有其他组件时,中心组件将展开以填充整个容器。
http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html
如果窗口被放大,中心区域将获得尽可能多的可用空间。
您可以发布运行应用时所看到内容的图片吗?以下是一个工作示例。值得注意的一件事是,每个容器一直到顶部BorderLayout
也使用JFrame
。在您的尝试中,某些上层容器可能会限制BorderLayout
的大小,因此也会限制内部的JPanel
。
JButton
答案 1 :(得分:4)
BorderLayout
是最简单的解决方案。
您可能遇到的问题是如何布置父面板。将按钮添加到使用BorderLayout
的面板,然后将面板添加到使用FlowLayout
的面板将不会产生您所效果的效果。
public class ExpandButtonTest {
public static void main(String[] args) {
new ExpandButtonTest();
}
public ExpandButtonTest() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new JButton("I'm a big button"));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
答案 2 :(得分:3)
使用BorderLayout
时似乎对我很好:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test {
public Test() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel() {
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 300);
}
};
panel.setLayout(new BorderLayout());
JButton button = new JButton("Button");
panel.add(button);
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Test();
}
});
}
}
请发布SSCCE以显示特定问题。