Java applet中的JPanel布局

Java applet中的JPanel布局,java,swing,Java,Swing,我有一个JPanel,它不是JFrame的一部分。出于各种原因,我必须通过自己的“更新”方法调用面板的绘制方法 这是我的代码: public void onLoad () { panel = new JPanel (); panel.setBounds (0,0,Main.WIDTH,Main.HEIGHT); panel.setLayout (new BoxLayout (panel, BoxLayout.Y_AXIS)); addButton ("butt

我有一个JPanel,它不是JFrame的一部分。出于各种原因,我必须通过自己的“更新”方法调用面板的绘制方法

这是我的代码:

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没有这个方法。

我不知道你在寻找什么,但对我来说这很有效

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

}

您正在使用JApplet类吗?我相信Swing组件在普通小程序中无法正确呈现。谢谢。我试图在没有将面板连接到小程序的情况下绘制面板。我在寻找面板如何“打包”按钮以设置正确的边界。我找不到如何将面板添加到小程序中,以便它能够正确地“打包”,就像您的示例中那样,因此我在代码中做了一个变通方法。