2014-07-13 145 views
0

這是用於俄羅斯方塊。玻璃(藍色)留下,控件(紅色面板)位於右側。換句話說,現在我只想將一個框架分爲兩部分:左部分(寬部分)是藍色部分,右部分是紅色部分。而已。但我似乎沒有做到這一點。如何將幀分爲兩部分

所以,我的邏輯是:讓框架有FlowLayout。然後我添加兩個面板,這意味着它們預計會排成一列。

我製備這樣的:

public class GlassView extends JFrame{ 
    public GlassView(){ 
     this.setSize(600, 750); 
     this.setVisible(true); 
     this.setLayout(new FlowLayout()); 
     this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 


     JPanel glass = new JPanel(); 
     glass.setLayout(new BoxLayout(glass, BoxLayout.Y_AXIS)); 
     glass.setSize(450, 750); 
     glass.setBackground(Color.BLUE); 
     glass.setVisible(true); 
     this.add(glass); 

     JPanel controls = new JPanel(); 
     controls.setLayout(new BoxLayout(controls, BoxLayout.Y_AXIS)); 
     controls.setSize(150, 750); 
     controls.setBackground(Color.RED); 
     controls.setVisible(true); 
     this.add(controls); 
    } 
} 

但只有一個灰色的幀是在屏幕上可見。你能幫我理解爲什麼嗎?

+0

爲了您的實物資料,總是()'和'frame.setVisible()'只是將所有組件的容器後,沒有在這之前撥打電話到'frame.pack。否則,在很多情況下,您可能無法在屏幕上看到內容。 –

+0

如果'JSplitPane'不是你想要的,那麼請考慮[GridBagLayout](http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html),這可能可以輕鬆地完成這項任務。請看看這個[示例](http://stackoverflow.com/a/17640318/1057230),爲了更加清晰,至於如何:-) –

+1

你正在使用'setSize(...)'和許多佈局管理器(大多數?)不尊重大小屬性,而是經常使用preferredSize。 –

回答

3

由於埃米爾說你想用這個JSplitPane。我在你的代碼中添加了這個。看看這個。

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    GlassView view = new GlassView(); 
} 

private static class GlassView extends JFrame { 

    private int width = 600; 
    private int height = 750; 

    public GlassView() { 
     this.setSize(width, height); 
     this.setVisible(true); 
     this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

     JPanel glass = new JPanel(); 
     glass.setSize(450, 750); 
     glass.setBackground(Color.BLUE); 
     glass.setVisible(true); 

     JPanel controls = new JPanel(); 
     controls.setSize(150, 750); 
     controls.setBackground(Color.RED); 
     controls.setVisible(true); 

     JSplitPane splitPane = new JSplitPane(); 
     splitPane.setSize(width, height); 
     splitPane.setDividerSize(0); 
     splitPane.setDividerLocation(150); 
     splitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT); 
     splitPane.setLeftComponent(controls); 
     splitPane.setRightComponent(glass); 

     this.add(splitPane); 
    } 
} 
1

如何分割幀分成兩個部分 ... 我想正好有分成兩個部分的框架:左(寬)部分爲藍色,右邊是紅色的。

要使用的是一個SplitPane

+0

謝謝你的回答。但這似乎不適合我。這個SplitPane用於交互式調整大小,這不是我的情況。其次,我想了解我對這些小組做錯了什麼。 – Michael