簡體   English   中英

如何在Java Swing中創建響應式布局

[英]How would I create a responsive layout in Java Swing

我在擺動的JPanel中顯示鍵值對的列表。 鍵顯示在JLabel中,而值顯示在JTextField中。 面板上有足夠的空間來顯示1或2列鍵值對,具體取決於父級JFrame的大小。 除非面板太小,否則我想顯示2列鍵值對。 然后,我想切換到一列。 如果不編寫自己的自定義布局管理器,是否可以在Swing中實現?

將每個鍵值對放在自己的面板上,然后將面板添加到“流布局”中,除了標簽彼此不對齊且文本字段彼此不對齊之外,我會做我想做的事情,因此看起來很糟糕。 有一個更好的方法嗎?

編輯:

這就是它的樣子。 如果面板足夠大,請顯示兩列。 否則,顯示一列。

2欄

   Some Key _______________                Key 2 ________________ 
Another Key _______________      Yet Another Key ________________
      Key 5 _______________                Key 6 ________________

1列

       Some Key _______________                
          Key 2 _______________ 
    Another Key _______________      
Yet Another Key _______________
          Key 5 _______________                
          Key 6 ________________

您可以使用FlowLayout的想法,仍然可以制作標簽/文本字段。 在每個鍵/值面板上添加一個長度最長的標簽,以將文本字段向右強制每個面板上相同的數量。 就像是:

import java.awt.*;
import javax.swing.*;

public class Test implements Runnable
{
  private String[] keys = {"One", "Twoooooo", "Three", "Four",
                           "Five", "Six", "Seven", "Eight",
                           "Nine", "Ten", "Eleven", "Twelve"};
  private String[] values = {"Apple", "Boy", "Cat", "Denmark",
                             "Elephant", "Foo", "Hello", "Igloo",
                             "Jug", "Kangaroo", "Lip", "Now"};

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

  public void run()
  {
    JPanel panel = new JPanel(new FlowLayout());
    GridBagConstraints gbc;
    JTextField textField = null;
    int maxWidth = 0;
    JLabel[] labels = new JLabel[keys.length];

    for (int i = 0; i < keys.length; i++)
    {
      labels[i] = new JLabel(keys[i]);
      maxWidth = Math.max(labels[i].getPreferredSize().width, maxWidth);
    }

    JPanel[] panels = new JPanel[keys.length];

    for (int i = 0; i < keys.length; i++)
    {
      panels[i] = new JPanel(new GridBagLayout());

      gbc = new GridBagConstraints();
      gbc.gridx = 0;
      gbc.gridy = 0;
      gbc.anchor = GridBagConstraints.EAST;
      gbc.insets = new Insets(1,1,1,1);
      panels[i].add(Box.createHorizontalStrut(maxWidth), gbc);

      gbc.gridy = 1;
      panels[i].add(labels[i], gbc);

      textField = new JTextField(10);
      textField.setText(values[i]);
      gbc.gridx = 1;
      panels[i].add(textField, gbc);

      panel.add(panels[i]);
    }

    JFrame frame = new JFrame("Test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(panel);
    frame.setSize(240, 400);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM