这个Java GUI可以简化吗?

时间:2014-05-12 22:06:30

标签: java swing user-interface

我正在编写一个Java GUI应用程序,它是这样的:

JPanel main = new JPanel(new GridLayout(1, 1));
JPanel buttonPanel = new JPanel();
buttonPanel.add(button);
main.add(buttonPanel)

我想在网格中添加一个按钮,但我希​​望它以网格面板为中心。 将按钮添加到另一个JPanel允许我将其居中到网格。

有没有更短的方法可以做到这一点?

例如:

JPanel main = new JPanel(new GridLayout(1, 1));
JPanel buttonPanel = JPanel();
main.add(new JPanel().add(button));

这对我不起作用。

谢谢:)

2 个答案:

答案 0 :(得分:1)

我同意其他评论者认为减少代码行数可能不像您认为的那样是必要的:一般来说,您的目标应该是减少代码复杂性,不是代码 length ,并且最小化长度的努力经常导致代码更复杂/难以理解而不是更少。

也就是说,应用基本的OO原则可以使您缩短代码,同时保持(如果不是增加)其清晰度:

 class CenteredContentPanel extends JPanel { 
      CenteredContentPanel(JComponent addTo){
          this.setLayout(new GridLayout(1,1)); 
          JPanel parentPanel = new JPanel();
          parentPanel.add(addTo);
          this.add(parentPanel);
      }
 }

现在,您可以使用一行代码向父容器中添加尽可能多的这些代码:

  JPanel main = new JPanel();
  main.add(new CenteredContentPanel(button));
  //repeat above line to add as many "centered" components as you need to

(代码未经测试,因为我目前无法访问IDE,但您获得了要点......)

答案 1 :(得分:-1)

您需要在框架中添加main:

      add(main.add(new JPanel().add(button)));

这对我来说很好用:

     import java.awt.GridLayout;
     import javax.swing.JButton;
     import javax.swing.JFrame;
     import javax.swing.JPanel;

      public class MyFrameClass extends JFrame 
      {

    public MyFrameClass(){

   JPanel main = new JPanel(new GridLayout(1, 1));
   JButton button = new JButton();
   add(main.add(new JPanel().add(button)));
   setSize(800,600);
   setVisible(true);


  }
 public static void main (String [] args)
 {
   new MyFrameClass();
 }

 }