首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java GUI布局

Java GUI布局
EN

Stack Overflow用户
提问于 2013-04-22 17:30:31
回答 5查看 4.3K关注 0票数 2

谁能告诉我我需要使用哪种java布局来实现下面的布局:

我目前正在使用FlowLayout,但是我无法让输入字段在输出窗口旁边对齐:

抱歉,如果这是一个简单的问题,这是我第一次使用java。下面是我的框架代码:

代码语言:javascript
复制
    private void makeFrame()
     {
       setLayout(new FlowLayout(0));

    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    JPanel panel3 = new JPanel();
    JPanel panel4 = new JPanel();
    JPanel panel5 = new JPanel();
    JPanel panel6 = new JPanel();
    JPanel panel7 = new JPanel();

    panel1.setLayout(new FlowLayout(0));
    panel2.setLayout(new FlowLayout(0));
    panel3.setLayout(new FlowLayout(0));
    panel4.setLayout(new FlowLayout(0));
    panel5.setLayout(new FlowLayout(0));
    panel6.setLayout(new FlowLayout(0));
    panel7.setLayout(new FlowLayout(0));

    JLabel firstnameJLabel = new JLabel("First Name");
    JLabel lastnameJLabel = new JLabel("Last Name");
    JLabel streetJLabel = new JLabel("Street");
    JLabel townJLabel = new JLabel("Town");
    JLabel postcodeJLabel = new JLabel("Post Code");


    panel1.add(listAllBtn);
    panel1.add(listPersonalBtn);
    panel1.add(listBusinessBtn);
    panel1.add(addPersonalBtn);
    panel1.add(addBusinessBtn);
    panel1.add(deleteBtn);
    panel1.add(findBtn);
    panel1.add(quitBtn);


    panel2.add(firstnameJLabel);
    panel2.add(this.firstNameField);
    panel2.add(this.bookScrollPane);
    this.outputArea.setEditable(false);


    panel3.add(lastnameJLabel);
    panel3.add(this.lastNameField);

    panel4.add(streetJLabel);
    panel4.add(this.streetField);

    panel5.add(townJLabel);
    panel5.add(this.townField);

    panel6.add(postcodeJLabel);
    panel6.add(this.postcodeField);

    panel7.add(enterBtn);


    add(panel1);
    add(panel2);
    add(panel3);
    add(panel4);
    add(panel5);
    add(panel6);
    add(panel7);

    enterBtn.addActionListener(this);
  }
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-04-22 17:49:38

我使用Swing已经有一段时间了,但是它的架构看起来是这样的:

在底部有一个面板,它是BorderLayout

  • Inside,总共添加了4个新面板,北、西、中和东。在

  • 中,您添加了一个包含JSCrollpane.

的面板,您添加了一个包含

  • 的面板。此面板包含名称等的标签,以及ENTER按钮

  • in BorderLayout.CENTER您添加了与标签相对应的文本字段

  • 在BorderLayout.EAST中,您添加了

这可能会给你一个想法,你可以尝试这些不同的面板来实现你想要的

票数 3
EN

Stack Overflow用户

发布于 2013-04-22 17:39:59

使用多个嵌套布局管理器

这个示例看起来像一个顶级BorderLayout,在CENTER位置有滚动窗格,在NORTH位置有一行按钮(使用FlowLayout),在WEST位置有一个文本字段的GridLayout。后者可以通过使用GroupLayout来改进,它允许单独调整行和列的大小,但使用起来有点复杂。

有一个很棒的tutorial on using layout managers (不幸的是,它似乎已经从甲骨文的服务器上消失了,链接指向一个可能是暂时的副本)。

票数 4
EN

Stack Overflow用户

发布于 2013-04-22 17:53:58

我只会使用MigLayout进行高级页面布局,然后下拉到简单的布局管理器。它本质上是一个网格布局,但它非常容易使用。但是Miglayout不能包装项目,这显然是Swing中的设计问题。WrapLayout是一个布局管理器,它为您提供了该功能,但它可能会有问题。

http://tips4java.wordpress.com/2008/11/06/wrap-layout/

看看你提供的屏幕截图,我模拟了你想要分割它的方式。总共有9行(0-8)和3列(0-2)。对于像最上面的控件这样的东西,您将把它们“跨越”到所有三列。

对于文本,您只需将文本放在它的单独框中的第1行,第1列的名字,或第2行,第1列的姓氏,等等。

您可以对输入框执行相同的操作。

在下面的图片中,蓝色是列,橙色是行。

所以总结一下;

  • Miglayout用于您的高级布局。这就像在超文本标记语言中使用表格一样。
  • 使用其他布局管理器在Miglayout提供的网格框中对项目进行布局。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16143708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档