![](/img/trans.png)
[英]Java JButton are not going over the JLabel ( with image in) in a container
[英]Java: Expand JButton to fill Container
我有一個JButton
,我想擴展以填充持有它的JPanel
的大小。 我嘗試過幾種不同的方式,沒有運氣。 以下是一些嘗試:
這里推薦的手動尺寸設置 - 按鈕尺寸沒有變化。
panel = new JPanel(new CardLayout()); button = new JButton(); button.setPreferredSize(new Dimension(BUTTON_SIZE, BUTTON_SIZE)); panel.add(button);
試圖用一個BorderLayout
是在暗示,擴大按鈕在這里 。 尺寸沒有變化。
panel = new JPanel(new BorderLayout()); button = new JButton(); panel.add(button, BorderLayout.CENTER);
我可能做錯了什么,所以非常感謝任何幫助。
編輯
以下是解決問題的摘要。 有兩件事有效
new JPanel
的調用中), 根據Oracle默認為BorderLayout。 new BorderLayout(0,0)
)。 您的第二次嘗試應該有效,但這並不意味着您的整個頂級容器將由包含您的JButton
的JPanel
填充。 如果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);
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);
}
});
}
}
使用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以顯示具體問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.