我的 GUI 的影像。
我正在嘗試將組件添加到兩個JPanel容器中,然后將這些面板添加為卡片。我想要以垂直方式標簽后的復選框。我面臨的問題是組件出現在兩列網格中:
public class MyFrame extends JFrame {
MyFrame(int width, int height, String title){
setTitle(title);
setSize(width, height);
JPanel internalJP1 = new JPanel(new GridLayout(5,1));
JLabel hobby = new JLabel("Enter your hobbies:");
JCheckBox cricket = new JCheckBox("Cricket");
JCheckBox music = new JCheckBox("Music");
JCheckBox drawing = new JCheckBox("Drawing");
JCheckBox dancing = new JCheckBox("Dancing");
JCheckBox other = new JCheckBox("Other");
internalJP1.add(hobby);
internalJP1.add(cricket);
internalJP1.add(music);
internalJP1.add(drawing);
internalJP1.add(dancing);
internalJP1.add(other);
JPanel internalJP2 = new JPanel(new GridLayout(4,1));
JLabel payment = new JLabel("Payment by:");
ButtonGroup buttonGroup = new ButtonGroup();
JRadioButton cheque = new JRadioButton("Cheque", false);
JRadioButton cash = new JRadioButton("Cash", false);
JRadioButton debitCard = new JRadioButton("Debit Card", false);
JRadioButton creditCard = new JRadioButton("Credit Card", false);
buttonGroup.add(cheque);
buttonGroup.add(cash);
buttonGroup.add(debitCard);
buttonGroup.add(creditCard);
internalJP2.add(payment);
internalJP2.add(cheque);
internalJP2.add(cash);
internalJP2.add(debitCard);
internalJP2.add(creditCard);
Container c = getContentPane();
CardLayout cl = new CardLayout();
c.setLayout(cl);
c.add(internalJP1,"crd1");
c.add(internalJP2,"crd2");
cl.show(c,"crd1");
}
}
public class Jtest {
public static void main(String[] args) {
MyFrame frame = new MyFrame(300,200,"FirstFrame");
frame.setVisible(true);
}
}
uj5u.com熱心網友回復:
只需更改這行代碼(在類的建構式中MyFrame)
JPanel internalJP1 = new JPanel(new GridLayout(5,1));
對此
JPanel internalJP1 = new JPanel(new GridLayout(0,1));
即用 0 替換 5
我發現GridLayout不直觀。當建構式的row引數GridLayout為零時,每行將包含所指示的列數。因此new GridLayout(0, 1)將確保每一行(在網格中)將包含一列,并且它將根據需要創建盡可能多的行以確保這一點。
請注意,GridLayout當您想將 GUI 組件放置在單個列中時,它不是唯一要使用的布局管理器。秋千也有BoxLayout,GridBagLayout,GroupLayout和SpringLayout。
還有第三方布局管理器,包括JGoodies和MiG Layout。
uj5u.com熱心網友回復:
您使用 aCardLayout查看一個面板或另一個面板這一事實不會影響這些面板的布局。您的問題完全與 2 個面板的布局有關。
有 2 種簡單的方法可以將面板固定為 1 列:
- 固定它們的行數,使其 >= 您實際添加的元素數。現在,您有
JPanel internalJP1 = new JPanel(new GridLayout(5,1));- 但要添加 6 個元素。如果您將其更改為JPanel internalJP1 = new JPanel(new GridLayout(6,1));,您將解決第一個面板的問題。相同的修復適用于您的第二個面板。更好的是,使用 0 來使布局使用as many rows as it needs(參見檔案)。 - 使用垂直 BoxLayout 并且根本不用擔心元素的數量 - 只需垂直堆疊它們。這還有一個額外的好處,那就是它們看起來更好,因為即使你給布局提供了比它需要的更大的尺寸,它們仍然可以很好地堆疊在一起:
JPanel internalJP1 = new JPanel(); internalJP1.setLayout(new BoxLayout(internalJP1, BoxLayout.Y_AXIS));
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/355620.html
上一篇:如何更改按鈕的顏色?
下一篇:Java圖形:通過2D線連接點
