我想使這個佈局中的java:哪個佈局管理器可以在Java中進行佈局?
南北標籤很容易通過BorderLayout的實現。但其餘的應該進入中心位置。所以我試圖把CENTER分成左右兩個網格,把左邊的網格劃分成3個不同的網格,但是它們不在我想要的位置,看起來也很複雜。也許有一個更簡單的方法。
有沒有人有任何想法?
我想使這個佈局中的java:哪個佈局管理器可以在Java中進行佈局?
南北標籤很容易通過BorderLayout的實現。但其餘的應該進入中心位置。所以我試圖把CENTER分成左右兩個網格,把左邊的網格劃分成3個不同的網格,但是它們不在我想要的位置,看起來也很複雜。也許有一個更簡單的方法。
有沒有人有任何想法?
爲了解決這種情況,我所做的是這樣的:
1. The content pane will have the BorderLayout, the top JLabel and
the bottom JLabel will go to their respective places using the
BorderLayout's PAGE_START and PAGE_END constraints. Now the
CENTER area is occupied by the BasePanel.
2. The BasePanel will have GridLayout (1 Rows, 2 Columns), with two
JPanel, left and right.
3. Here right JPanel will have a GridLayout (3 Rows, 1, Columns
, 10 HorizontalGap, 10 VerticalGap).
4. Left JPanel will have GridBagLayout with two JPanels one for
GRID 0, 0 and other for GRID 0, 1.
5. The JPanel at Grid 0, 0 will have GridBagLayout, for JTextField
and the JLabel.
6. The JPanel at Grid 0, 1 will have BorderLayout one for
JTextArea and one for another JPanel with GridLayout having
2 JRadioButtons.
下面是代碼,執行一個指定的輸出上面的任務:
import javax.swing.*;
import java.awt.*;
import java.util.Random;
/**
* Created with IntelliJ IDEA.
* User: Gagandeep Bali
* Date: 2/10/13
* Time: 1:23 PM
* To change this template use File | Settings | File Templates.
*/
public class LayoutExample
{
private JTextField tField;
private JTextArea tArea1;
private JTextArea tArea2;
private JTextArea tArea3;
private JTextArea tArea4;
private JRadioButton leftRButton;
private JRadioButton rightRButton;
private GridBagConstraints gbc;
private Random random;
public LayoutExample()
{
gbc = new GridBagConstraints();
random = new Random();
}
private void displayGUI()
{
JFrame frame = new JFrame("Nested Layout Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = getPanel();
contentPane.setLayout(new BorderLayout(5, 5));
JLabel topLabel = new JLabel(
"PAGE_START Label", JLabel.CENTER);
contentPane.add(topLabel, BorderLayout.PAGE_START);
JPanel basePanel = getPanel();
basePanel.setLayout(new GridLayout(1, 2));
JPanel leftPanel = getPanel();
leftPanel.setLayout(new GridBagLayout());
leftPanel.setBorder(
BorderFactory.createEmptyBorder(
10, 10, 10, 10));
JLabel fieldLabel = new JLabel("Label", JLabel.CENTER);
tField = new JTextField(20);
JPanel topPanel = getPanel();
topPanel.setLayout(new GridBagLayout());
topPanel.add(fieldLabel, getConstraints(
0, 0, 1, 1
, GridBagConstraints.HORIZONTAL, 0.3f, 0.1f));
topPanel.add(tField, getConstraints(
1, 0, 2, 1
, GridBagConstraints.HORIZONTAL, 0.7f, 1.0f));
leftPanel.add(topPanel, getConstraints(
0, 0, 1, 1
, GridBagConstraints.BOTH, 1.0f, 0.40f));
JPanel middlePanel = getPanel();
middlePanel.setLayout(new BorderLayout(5, 5));
tArea1 = new JTextArea(10, 10);
middlePanel.add(tArea1, BorderLayout.CENTER);
JPanel radioPanel = getPanel();
radioPanel.setLayout(new GridLayout(1, 2, 5, 5));
leftRButton = new JRadioButton("Left", false);
rightRButton = new JRadioButton("Right", false);
radioPanel.add(leftRButton);
radioPanel.add(rightRButton);
middlePanel.add(radioPanel, BorderLayout.PAGE_END);
leftPanel.add(middlePanel, getConstraints(
0, 1, 1, 2
, GridBagConstraints.BOTH, 1.0f, 0.60f));
basePanel.add(leftPanel);
JPanel rightPanel = getPanel();
rightPanel.setLayout(new GridLayout(0, 1, 10, 10));
rightPanel.setBorder(
BorderFactory.createEmptyBorder(
10, 10, 10, 10));
tArea2 = new JTextArea(10, 10);
tArea3 = new JTextArea(10, 10);
tArea4 = new JTextArea(10, 10);
rightPanel.add(tArea2);
rightPanel.add(tArea3);
rightPanel.add(tArea4);
basePanel.add(rightPanel);
contentPane.add(basePanel, BorderLayout.CENTER);
JLabel bottomLabel = new JLabel(
"PAGE_END Label", JLabel.CENTER);
contentPane.add(bottomLabel, BorderLayout.PAGE_END);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private JPanel getPanel()
{
JPanel panel = new JPanel();
panel.setOpaque(true);
panel.setBackground(new Color(random.nextFloat()
, random.nextFloat(), random.nextFloat()
, random.nextFloat()));
panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
return panel;
}
private GridBagConstraints getConstraints(
int x, int y, int w, int h, int fillValue
, float weightx, float weighty)
{
//GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
gbc.fill = fillValue;
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = w;
gbc.gridheight = h;
gbc.weightx = weightx;
gbc.weighty = weighty;
return gbc;
}
public static void main(String... args)
{
Runnable runnable = new Runnable(){
@Override
public void run()
{
new LayoutExample().displayGUI();
}
};
EventQueue.invokeLater(runnable);
}
}
這裏是輸出相同的:
與嵌套容器一樣,問題是正確的對齊方式(fi文本框的上邊框與右邊的textarea的上邊角不對齊,右邊框與下面的textarea的右邊角不對齊)時間爲了解決這些問題(一遍又一遍)更好地投資學習一個非常好的layoutManager,它可以在一個面板中處理複雜的佈局,然後始終使用它。我的0.02美分:-) – kleopatra 2013-02-10 11:11:20
刪除了'JTextField'和'JTextArea'的一些對齊問題。使用'GridBagLayout'而不是'FlowLayout'。 – 2013-02-10 15:25:14
,因爲你需要的想法,那就是:
創建兩個PANAL左,右。
右面板中添加JTA1與添加JTF與BorderLayout.NORTH
左側面板上添加JTA添加單選按鈕BorderLayout.NORTH
BorderLayout
你外佈局。
NORTH
和SOUTH
是各自的標籤。
EAST
或CENTER
應分配一個嵌套Panel
,對其分配BoxLayout
,或單柱GridLayout
或其他BorderLayout
(使用NORTH
,CENTER
和SOUTH
),你把你的3 JTextAreas
。
WEST
(或CENTER
如果EAST
在事先的步驟中使用)可以與另一個嵌套Panel
完成的,可以使用一GridBagLayout
或GroupLayout
。
查看更多信息here。
請,一切都取決於什麼,這和h ow將可調整大小與容器,其他任何東西,無論是隻有一半問及回答問題 – mKorbel 2013-02-08 19:40:35
GridBagLayout或複合面板/佈局 – MadProgrammer 2013-02-08 19:41:59