2014-05-12 137 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(); 
} 

}