Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个JavaGUI可以简化吗?_Java_Swing_User Interface - Fatal编程技术网

这个JavaGUI可以简化吗?

这个JavaGUI可以简化吗?,java,swing,user-interface,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 JPane

我正在编写一个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));
这对我不起作用


谢谢:)

您需要将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();
 }

 }

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

也就是说,应用基本的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的权限,但您可以了解要点…

为什么要缩短它?任何更短的代码和代码的用途都可能变得不清楚。我希望避免使用许多行为网格上的每个元素创建单独的JPanel(),例如,我的应用程序需要一个7x3的网格,如果a希望将所有元素居中,那么我需要为每个元素创建单独的JPanel()。我认为有很多代码,这是我的问题,有没有办法避免一个接一个地创建,或者代码约定说我需要这样做?非常感谢,这项工作非常完美。OO的力量。我会考虑减少线不是每次都需要的。再次感谢你,这对我来说已经解决了。