【问题标题】:Multiple JPanel inside another另一个里面有多个JPanel
【发布时间】:2016-02-23 03:19:53
【问题描述】:

look here 我必须制作这样的格式,比如制作一个 1,2 面板,然后在左侧放置一个 3,1 面板。然后,我在左中面板放了 4 个文本字段,在左下面板放了一个按钮。

我不确定我是否可以只使用 GridLayout 或者我是否也必须使用 BorderLayout。

我怎样才能把它组织起来,因为当我设置它时,我无法得到正确的布局。文本字段不在正确的位置,它们最终在右侧。

public class CreatePanel extends JPanel
 {
   private Vector projectList;
   private JButton button1;
   private ProjectSpendingPanel spendingPanel;

   private JFrame frame1;
   JPanel panel1;
   JPanel leftPanel;
   JPanel subPanel;

   GridLayout layout1;
   BorderLayout layout2;
   GridLayout layout3;

   JLabel message;
   JLabel labelName;
   JLabel labelNumber;
   JLabel labelLocation;
   JLabel labelFunding;

   JTextField textField1;
   JTextField textField2;
   JTextField textField3;
   JTextField textField4;

 //Constructor initializes components and organize them using certain layouts
 public CreatePanel(Vector projectList, ProjectSpendingPanel spendingPanel)
  {
    this.projectList = projectList;
    this.spendingPanel = spendingPanel;
	//organize components here
	layout1 = new GridLayout(1,2);
	layout2 = new BorderLayout(1,3);
	layout3 = new GridLayout(4,2);
	this.setLayout(layout1);

	panel1 = new JPanel(layout1);
	leftPanel = new JPanel(layout3);
	subPanel = new JPanel(layout2);

	add(panel1);
	panel1.add(subPanel);
	panel1.add(leftPanel);

	labelName = new JLabel("Project Name");
	leftPanel.add(labelName);
	textField1 = new JTextField("", 15);
    leftPanel.add(textField1,BorderLayout.SOUTH);

	labelName = new JLabel("Project Number");
	leftPanel.add(labelName);
	textField2 = new JTextField("",15);
	leftPanel.add(textField2);

	labelLocation = new JLabel("Project Location");
	leftPanel.add(labelLocation);
	textField3 = new JTextField("",15);
	leftPanel.add(textField3);

	labelFunding = new JLabel("Initial Funding");
	leftPanel.add(labelFunding);
	textField4 = new JTextField("",15);
	leftPanel.add(textField4);

	add(leftPanel);
    button1 = new JButton("Create a project");
    subPanel.add(button1,BorderLayout.SOUTH);
  }

【问题讨论】:

  • 你可以发布你已经尝试过的代码吗?

标签: java jpanel


【解决方案1】:

要获得您可能想要的结果,您需要稍微调整一下代码。

你的台词

panel1 = new JPanel(layout1);
leftPanel = new JPanel(layout3);
subPanel = new JPanel(layout2);

应该改为阅读

panel1 = new JPanel(new GridLayout(2, 1));
leftPanel = new JPanel(layout3);
subPanel = new JPanel(layout2);

GridLayout 先取行,再取列。您的 layout1 定义了一行和两列,但您将它用于文本字段和按钮,所以我认为这两个面板需要彼此上方。

其次,你需要改变顺序

add(panel1);
panel1.add(subPanel);
panel1.add(leftPanel);

add(panel1);
panel1.add(leftPanel);
panel1.add(subPanel);

最后,我认为你需要改变

add(leftPanel);
button1 = new JButton("Create a project");

add(spendingPanel);
button1 = new JButton("Create a project");

再次添加leftPanel似乎会破坏布局。如果您不想在这里看到您的spendingPanel,您可以使用new JPanel()

这是screenshot of the running program

【讨论】:

    猜你喜欢
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多