2010-11-18 92 views
2

我有一個JPanel不是JFrame的一部分。由於各種原因,我必須通過我自己的「更新」方法來調用面板的繪畫方法。在applet中的JPanel佈局

這是我的代碼:

public void onLoad() 
{ 
    panel = new JPanel(); 
    panel.setBounds (0,0,Main.WIDTH,Main.HEIGHT); 

    panel.setLayout (new BoxLayout (panel, BoxLayout.Y_AXIS)); 

    addButton ("button1", panel); 
    addButton ("button2", panel); 
} 

private void addButton (String text, Container container) 
{ 
    JButton button = new JButton (text); 
    button.setPreferredSize (new Dimension (100,20)); 
    button.setAlignmentX (Component.CENTER_ALIGNMENT); 
    container.add (button); 
} 

public void onRender (Graphics2D g) 
{ 
    panel.paint (g); 
} 

這僅繪製面板的背景色。如果我在addButton方法中添加button.setBounds(...),那麼它會繪製按鈕但不受BoxLayout的影響。

所以我想讓按鈕明顯受到BoxLayout的影響。我對Swing的工作原理並不是很瞭解,所以我不知道該怎麼做。 JFrame有一個pack()方法,我認爲它是我需要的,但是對於JPanels來說有些等價物,因爲JPanels沒有這個方法。

+0

是否使用JApplet類的?我相信Swing組件在常規Applets中不能正確渲染。 – perp 2010-11-18 12:49:06

回答

3

我不知道你在找什麼,但對我來說這很好。

import java.awt.Component; 
import java.awt.Dimension; 
import javax.swing.BoxLayout; 
import javax.swing.JApplet; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class TestApplet extends JApplet{ 
    public static void main(String[] args){ 
     new TestApplet(); 
    } 
    public TestApplet(){ 
     this.setSize(400,400); 
     this.add(getCustPanel()); 
     this.setVisible(true); 
    } 
    private JPanel getCustPanel() { 
     JPanel panel = new JPanel(); 
     panel.setLayout (new BoxLayout(panel, BoxLayout.Y_AXIS)); 
     addButton ("button1", panel); 
     addButton ("button2", panel); 
     return panel; 
    } 
    private void addButton (String text, JPanel container) 
    { 
     JButton button = new JButton (text); 
     button.setPreferredSize (new Dimension(100,20)); 
     button.setAlignmentX (Component.CENTER_ALIGNMENT); 
     container.add (button); 
    } 

} 

alt text

+0

謝謝。我試圖繪製面板而不將其附加到小程序。我一直在尋找面板如何「包裝」按鈕來設置正確的邊界。我無法找到如何在代碼中添加解決方案以將面板添加到小程序,以便它能夠正確「打包」它,就像在您的示例中那樣。 – hesselbom 2010-11-18 12:57:16