繁体   English   中英

Java面板对齐

[英]Java panel alignment

class CipherGUIFrame extends JFrame {
  public CipherGUIFrame() {
    super("Caesar Cipher GUI");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(400, 600);

    JTextArea area1 = new JTextArea();
    JTextArea area2 = new JTextArea();
    JSpinner myspinner=new JSpinner();
    JPanel mainframe = new JPanel();
    mainframe.setLayout(new BoxLayout(mainframe, BoxLayout.Y_AXIS));
    JPanel p1 = new JPanel();
    JPanel p2 = new JPanel();
    JPanel p3 = new JPanel();
    p1.setLayout(new BoxLayout(p1, BoxLayout.Y_AXIS));
    p2.setLayout(new BoxLayout(p2, BoxLayout.Y_AXIS));
    p1.setBorder(BorderFactory.createTitledBorder("Cleartext"));
    p2.setBorder(BorderFactory.createTitledBorder("Spinner"));
    p3.setLayout(new BoxLayout(p3, BoxLayout.Y_AXIS));
    p3.setBorder(BorderFactory.createTitledBorder("Ciphertext"));
    p1.add(area1);
    p2.add(myspinner);
    p3.add(area2);
    mainframe.add(p1);
    mainframe.add(p2);
    mainframe.add(p3);
    this.add(mainframe);
  }
}

似乎这段代码产生了类似于以下内容的代码: http://i.imgur.com/ZIUdrBP.jpg

我正在尝试整理一下,使它看起来更干净。 有没有办法缩小中间面板或使其他面板更大以使其看起来更好?

不要设置任何大小,而是设置JTextAreas的列和行。 当您不想要BoxLayout的行为时,请不要使用它。 将您的JTextAreas放在JScrollPanes中。 并且不要忘记将JFrame打包()。

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

public class Cipher2 extends JPanel {
   public static final int ROWS = 12;
   public static final int COLS = 30;

   private JTextArea textArea1 = new JTextArea(ROWS, COLS);
   private JTextArea textArea2 = new JTextArea(ROWS, COLS);

   public Cipher2() {
      setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));  // Box OK here

      JScrollPane scroll1 = new JScrollPane(textArea1);
      add(wrapComponentWithTitle(scroll1, "Fubar"), BorderLayout.PAGE_START);

      add(wrapComponentWithTitle(new JSpinner(), "Spinner"), BorderLayout.CENTER);

      scroll1 = new JScrollPane(textArea2);
      add(wrapComponentWithTitle(scroll1, "Snafu"), BorderLayout.PAGE_END);
   }

   private JPanel wrapComponentWithTitle(JComponent component, String title) {
      // BoxLayout NOT OK here. Use BorderLayout instead
      JPanel wrapPanel = new JPanel(new BorderLayout());
      wrapPanel.add(component);
      wrapPanel.setBorder(BorderFactory.createTitledBorder(title));
      return wrapPanel;
   }

   private static void createAndShowGui() {
      Cipher2 mainPanel = new Cipher2();

      JFrame frame = new JFrame("Foo");
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

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

我想出了答案:将Y_AXIS更改为X_AXIS。

<3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM