Java Swing BoxLayout

标签 java forms swing layout-manager boxlayout

我创建了一个带有 Y.AXIS 订购框的表单。每个框都包含一个 JLabel 和一个 JList。此框内容按 X 轴排序。 (图)

  1. 如何在框之间添加垂直间隔以使其更具可读性。
  2. 如何拆分标签和列表,使标签更靠近左侧,列表更靠近右侧
  3. 我也愿意接受其他想法,使此表单更具可读性。

BOXLAYOUT

这是我正在使用的代码。 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);

编辑: 我尝试了使用 gridlayout 的解决方案,但使用了 JLists。

有没有办法让 jlist 周围有黑色边框之类的东西?

BlackBorderJlist

已解决编辑: list.setBorder(new LineBorder(Color.darkGray, 1));

最终结果:

RESULT

最佳答案

我自己,我会使用 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();
         }
      });
   }
}

显示时显示:

enter image description here

关于Java Swing BoxLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21217806/

相关文章:

java - 哈希整个对象而不先转换为 byte[]

javascript - ng-repeat 中的 Angular 多复选框数组

java - 当 UI 线程执行其业务时,如何向用户提供按下按钮后的反馈

java - Watson STT Java - 无法解析 MediaType AUDIO_WEBM

java - JPA Toplink - 在流程开始时检查 Activity 事务的需要是什么?

java - 找不到 WebApplicationContext : no ContextLoaderListener registered? 然后出现 404 错误

JavaScript 表单布局管理器

java - 在 java swing Jtable 中设置隐藏字段值

Java计时框架-Animator类查询

Java 和 .NET 互操作 (RSA) 签名