当前位置: 首页 > 知识库问答 >
问题:

Java Swing框布局

宁修永
2023-03-14

我创建了一个带有y.axis命令框的表单。每个框都包含一个JLabel和一个JList。这个盒子里的东西是X轴排序的。(图片)

  1. 如何在框之间添加垂直间隔,使其更易读。
  2. 如何拆分标签和列表,使标签更多地在左边,列表更多地在右边
  3. 我也欢迎其他使此表单更具可读性的想法。

这是我正在使用的代码。createCustomJList正在返回JList

String ean = (String) table.getModel().getValueAt(selection[0], 0);

JPanel addinfo= new JPanel();

String[] operations=new String[{"ROHTABAK","HERSTELLER","WARENGRUPPE","MARKENLOGO"};
Box moreInfo[] = new Box[4];

for(int i=0;i<operations.length;i++){   
    moreInfo[i] = Box.createHorizontalBox();
    moreInfo[i].add(new JLabel(operations[i]));
    moreInfo[i].add(createCustomJList(database.customgetter(operations[i],ean)));
    addinfo.add(moreInfo[i]);
}

BoxLayout layout = new BoxLayout(addinfo, BoxLayout.Y_AXIS);
addinfo.setLayout(layout);

JOptionPane.showMessageDialog(null,
    addinfo, "Naehere Infos",
    JOptionPane.OK_CANCEL_OPTION);

共有1个答案

瞿和硕
2023-03-14

我自己也会使用GridBagLayout来完成类似的任务。例如,虽然这不是问题的完美呈现,而且我在使用JLists的地方使用了JTextFields,但您得到了这样的想法:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.HashMap;
import java.util.Map;

import javax.swing.*;

@SuppressWarnings("serial")
public class InputForm extends JPanel {
   private static final int COLUMNS = 10;
   private static final int GAP = 3;
   private static final Insets LABEL_INSETS = new Insets(GAP, GAP, GAP, 15);
   private static final Insets TEXTFIELD_INSETS = new Insets(GAP, GAP, GAP, GAP);
   private String[] labelTexts;
   private Map<String, JTextField> fieldMap = new HashMap<String, JTextField>();

   public InputForm(String[] labelTexts) {
      this.labelTexts = labelTexts;
      setLayout(new GridBagLayout());
      for (int i = 0; i < labelTexts.length; i++) {
         String text = labelTexts[i];
         JTextField field = new JTextField(COLUMNS);
         fieldMap.put(text, field);

         addLabel(text, i);
         addTextField(field, i);
      }
   }

   public String[] getLabelTexts() {
      return labelTexts;
   }

   private void addTextField(JTextField field, int row) {
      GridBagConstraints gbc = new GridBagConstraints();
      gbc.gridwidth = 1;
      gbc.gridheight = 1;
      gbc.gridx = 1;
      gbc.gridy = row;
      gbc.anchor = GridBagConstraints.EAST;
      gbc.fill = GridBagConstraints.HORIZONTAL;
      gbc.insets = TEXTFIELD_INSETS;
      gbc.weightx = 1.0;
      gbc.weighty = 1.0;
      add(field, gbc);
   }

   private void addLabel(String text, int row) {
      GridBagConstraints gbc = new GridBagConstraints();
      gbc.gridwidth = 1;
      gbc.gridheight = 1;
      gbc.gridx = 0;
      gbc.gridy = row;
      gbc.anchor = GridBagConstraints.WEST;
      gbc.fill = GridBagConstraints.BOTH;
      gbc.insets = LABEL_INSETS;
      gbc.weightx = 1.0;
      gbc.weighty = 1.0;
      add(new JLabel(text), gbc);
   }

   public String getFieldText(String key) {
      String text = "";
      JTextField field = fieldMap.get(key);
      if (field != null) {
         text = field.getText();
      }
      return text;
   }

   private static void createAndShowGui() {
      String[] labelTexts = new String[] { "ROHTABAK", "HERSTELLER",
            "WARENGRUPPE", "MARKENLOGO" };
      InputForm inputForm = new InputForm(labelTexts);

      int result = JOptionPane.showConfirmDialog(null, inputForm, "Naehere Infos",
            JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
      if (result == JOptionPane.OK_OPTION) {
         for (String text : labelTexts) {
            System.out.printf("%20s %s%n", text, inputForm.getFieldText(text));
         }
      }
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

显示时显示:

 类似资料:
  • 我开始为一个项目制作这个网页,到目前为止是这样的: 但是我想把文本区域放在另一个上面,而不是并排放置 我希望它看起来怎么样: 谁能帮帮我吗 https://i.stack.imgur.com/ZzsKS.png

  • 我正在尝试使用Java并发和用于接口。 这意味着将有4个窗口,3个输入,一个输出。当您在3个GUI输入窗口中输入输入时,输出矩阵单元格将动态更改其值。我已经解决了程序的逻辑部分,但我仍然坚持使用swing显示接口,并将这两个东西绑定在一起? 在JavaSwing中表示矩阵的最佳布局是什么?从哪里开始学习这个?

  • 我很好奇,在放置组件时,如何使用miglaway在网格上均匀分布组件: 例如,如果我在一个按钮组中放置四个JRadioButton以跨越3行2列(2,3),然后放置三个JButton,则分布的权重是不相等的,我最终会得到以下结果: 如图所示,A和B的大小相同,C保留剩余的空间:我希望A、B、C在垂直方向上等于三分之一。 如果这在GridBagLayout中是可能的,我也可以利用它,但是我在任何一种

  • 我正在开发一个应用程序,通过逐步给出说明来帮助用户浏览网站。 说明以对话框的形式给出。我使用Java Swing创建GUI对话框。 这是我的代码结构: 当我运行它时,问题是指令对话框的所有3个实例同时运行。我同时弹出了3个对话框。 但是我希望它们一个接一个地运行——第二个对话框应该在第一个对话框的OK按钮按下之前出现,第三个对话框应该在第二个对话框的OK按钮按下之前出现。 我怎样才能做到这一点?

  • 问题内容: 范例GUI大家好,我有 问题。如果有人可以帮助,那就太好了。我正在使用border和 gridlayout,并且试图拆分GUI,但是这没有发生,因为我希望 按钮占整体的一小部分,可以说是1/5,但目前 超过了GUI的一半。我也尝试将按钮放在尺寸上, 但是我不确定这是否是一个好习惯。我有两个类,一个是 RunFurniture,它是框架的主要方法,另一个是 GUI的PanelFurnit

  • 基准网络 所有组件都与间隔为 8dp 的基准网格对齐。排版/文字(Type)与间隔为 4dp 的基准网格对齐。在工具条中的图标同样与间隔为 4dp 的基准网格对齐。这些规则适用于移动设备、平板设备以及桌面应用程序。 有关详细信息请参见组件一节。 有关详细信息请参见字体排版一节。 边框与间距 移动设备 移动设备布局模板包含了多种多样的屏幕和信息,这些信息描述了边框与间距如何应用于屏幕边界和元素。下面