我正在處理簡單登錄屏幕的佈局。我爲了使用網格佈局操縱的元素,但整個問題都來了,它佔據了這樣的全畫幅寬度:如何修復JPanel與佔據框架全寬的網格?
在哪裏,我希望它是一個固定的位置和寬度,高度和垂直,水平居中在一個框架內,但不佔用它的全尺寸。 可能會使用戶名和密碼標籤佔用較少的空間,所以文本字段實際上更接近它們。我嘗試設置我的面板的主要尺寸,如.setMaximumSize(Dimension (200, 150));
但它似乎不工作。
//Create the frame.
JFrame frame = new JFrame("Online Shop");
JPanel mainPanel = new JPanel();
JPanel usernamePanel = new JPanel();
JPanel passwordPanel = new JPanel();
JPanel buttonPanel = new JPanel();
JButton loginButton = new JButton("Login");
loginButton.setMaximumSize(new Dimension(100, 50));
JTextField username = new JTextField();
JLabel usernameLabel = new JLabel("Username");
JPasswordField password = new JPasswordField();
JLabel passwordLabel = new JLabel("Password");
//Panel
frame.setContentPane(mainPanel);
usernamePanel.setLayout(new GridLayout(1,2));
usernamePanel.add(usernameLabel);
usernamePanel.add(username);
passwordPanel.setLayout(new GridLayout(1,2));
passwordPanel.add(passwordLabel);
passwordPanel.add(password);
mainPanel.setLayout(new GridLayout(3, 1));
mainPanel.add(usernamePanel);
mainPanel.add(passwordPanel);
mainPanel.add(loginButton);
//Event Listeners
frame.addWindowListener(new MyWindowListener());
loginButton.addActionListener(new MyActionListener());
//Sizes, Positioning
frame.setSize(720, 480);
frame.setLocationRelativeTo(null);
//Show Frame
frame.setVisible(true);
注意'GridLayout'將*總是*看起來像垃圾。我通常會使用複合佈局或「GroupLayout」來處理這些事情。同時強烈同意camickr&trashgod明確設定尺寸是一個非常糟糕的主意。請參閱[我是否應避免使用Java Swing中的set(Preferred | Maximum | Minimum)Size方法?](http://stackoverflow.com/q/7229226/418556)(是) –