2014-05-12 89 views
0

我正在写一个Java GUI应用程序,并且是这样的:这个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

你为什么想使其更短?任何更短的代码的目的可能会变得不清楚。 – Vulcan

+0

我想要避免使用多行为网格上的每个元素创建单独的JPanel(),例如我的应用需要7x3的网格,并且如果想要居中所有元素,那么我需要创建一个单独的JPanel () 为每一个。我认为有很多代码,这就是我的问题,是否有避免一个一个创建的方法,或者代码约定说我需要这样做? – jesuscc29

回答

1

我同意与其他评议,减少数量的代码行可能不像您想象的那么必要:一般来说,您的目标应该是减少代码的复杂性,而不是代码长度,并且尽量减少长度往往导致代码更复杂/难以理解,而不是更少。

也就是说,应用基本的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,但你的要点...)

+0

非常感谢,这项工作非常完美。面向对象的力量。我会考虑减少线条并非每次都是必要的。再次感谢,这为我解决。 – jesuscc29

-1

您需要将主要增加了框架:

 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(); 
} 

}