[英]GridBagLayout not using anchor
在這里,我試圖將組件(按鈕)錨定在面板的側面,但顯然我的GridBagConstraints缺少了一些東西。 我希望他們可以填充一下; 任何想法,我將如何做這樣的事情 ? 我可以使用Insets進行填充嗎? 為任何幫助加油。
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;
@SuppressWarnings("serial")
public class PlayGamePanel extends JComponent{
@SuppressWarnings("unused")
JComponent GamePanel2() throws IOException {
JComponent GamePanel = new JLabel();
//Setting up the gridbaglayout
GamePanel.setLayout(new GridBagLayout());
GridBagConstraints gbLayout = new GridBagConstraints();
/*//Creating a button to test out switching panels
*
JButton testButton = new JButton ("test");
GamePanel.add(testButton);*/
//Creating buttons for answering the quiz
gbLayout.gridx = 0;
gbLayout.gridy = 0;
gbLayout.weightx = 1.0;
gbLayout.anchor = GridBagConstraints.NORTHWEST;
gbLayout.insets = new Insets(20, 20, 20, 20);
JButton AnswerOneButton = new JButton("Answer One");
GamePanel.add(AnswerOneButton);
GamePanel.add(AnswerOneButton, gbLayout);
gbLayout.gridx = 0;
gbLayout.gridy = 0;
gbLayout.weightx = 1.0;
gbLayout.anchor = GridBagConstraints.NORTHEAST;
gbLayout.insets = new Insets(20, 20, 20, 20);
JButton AnswerTwoButton = new JButton("Answer Two");
GamePanel.add(AnswerTwoButton);
GamePanel.add(AnswerTwoButton, gbLayout);
gbLayout.gridx = 0;
gbLayout.gridy = 0;
gbLayout.weightx = 1.0;
gbLayout.anchor = GridBagConstraints.SOUTHEAST;
gbLayout.insets = new Insets(20, 20, 20, 20);
JButton AnswerThreeButton = new JButton("Answer Three");
GamePanel.add(AnswerThreeButton);
GamePanel.add(AnswerThreeButton, gbLayout);
gbLayout.gridx = 0;
gbLayout.gridy = 0;
gbLayout.weightx = 1.0;
gbLayout.anchor = GridBagConstraints.SOUTHWEST;
gbLayout.insets = new Insets(20, 20, 20, 20);
JButton AnswerFourButton = new JButton("Answer Four");
GamePanel.add(AnswerFourButton);
GamePanel.add(AnswerFourButton, gbLayout);
return GamePanel;
}
}
添加組件時,需要將GridBagConstraints
傳遞給容器。
例如...
GamePanel.add(AnswerOneButton, gbLayout);
您還需要提供每個組件的單元格位置,例如...
gbLayout.gridx = 0;
gbLayout.gridy = 0;
JButton AnswerOneButton = new JButton("Answer One");
GamePanel.add(AnswerOneButton, gbLayout);
將AnswerOneButton
按鈕放在第一行的第一列中。
您可以使用insets
屬性為每個單元格提供填充,例如...
gbLayout.weightx = 1.0;
gbLayout.gridx = 0;
gbLayout.gridy = 0;
gbLayout.insets = new Insets(20, 20, 20, 20);
JButton AnswerOneButton = new JButton("Answer One");
GamePanel.add(AnswerOneButton, gbLayout);
現在,就我個人而言,我將使用NORTHEAST
, NORTHWEST
, SOUTHEAST
和SOUTHWEST
作為錨點,對我來說更有意義...
gbLayout.weightx = 1.0;
gbLayout.gridx = 0;
gbLayout.gridy = 0;
gbLayout.insets = new Insets(20, 20, 20, 20);
gbLayout.anchor = GridBagConstraints.NORTHWEST;
JButton AnswerOneButton = new JButton("Answer One");
GamePanel.add(AnswerOneButton, gbLayout);
更新所有按鈕的所有約束后,我得到類似...
您可能想看看如何使用GridBagLayout了解更多詳細信息...
您可能還希望通讀Java編程語言的代碼約定 ,這將使人們更容易閱讀您的代碼;)
使用JLabel
作為主容器也是一個很有趣的選擇,您可能會發現JPanel
提供了更好的支持
更新了示例代碼
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class TestLayout {
public static void main(String[] args) {
new TestLayout();
}
public TestLayout() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(GamePanel2());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
@SuppressWarnings("unused")
JComponent GamePanel2() {
JComponent GamePanel = new JPanel();
GamePanel.setOpaque(false);
//Setting up the gridbaglayout
GamePanel.setLayout(new GridBagLayout());
GridBagConstraints gbLayout = new GridBagConstraints();
/*//Creating a button to test out switching panels
*
JButton testButton = new JButton ("test");
GamePanel.add(testButton);*/
//Creating buttons for answering the quiz
gbLayout.gridx = 0;
gbLayout.gridy = 0;
gbLayout.weightx = 1.0;
gbLayout.anchor = GridBagConstraints.NORTHWEST;
gbLayout.insets = new Insets(20, 20, 20, 20);
JButton AnswerOneButton = new JButton("Answer One");
GamePanel.add(AnswerOneButton, gbLayout);
gbLayout.gridx = 1;
gbLayout.anchor = GridBagConstraints.NORTHEAST;
JButton AnswerTwoButton = new JButton("Answer Two");
GamePanel.add(AnswerTwoButton, gbLayout);
gbLayout.gridx = 0;
gbLayout.gridy = 1;
gbLayout.anchor = GridBagConstraints.SOUTHWEST;
JButton AnswerThreeButton = new JButton("Answer Three");
GamePanel.add(AnswerThreeButton, gbLayout);
gbLayout.gridx = 1;
gbLayout.gridy = 1;
gbLayout.weightx = 1.0;
gbLayout.anchor = GridBagConstraints.SOUTHEAST;
JButton AnswerFourButton = new JButton("Answer Four");
GamePanel.add(AnswerFourButton);
GamePanel.add(AnswerFourButton, gbLayout);
return GamePanel;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.