代码之家  ›  专栏  ›  技术社区  ›  hesselbom

小程序中的jpanel布局

  •  2
  • hesselbom  · 技术社区  · 15 年前

    我有一个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);
    }
    

    这只会绘制面板的背景色。如果我在add button方法中添加button.setbounds(…),那么它会绘制按钮,但不受boxlayout的影响。

    所以我希望按钮明显地受到盒子布局的影响。我不太了解秋千的确切工作原理,所以我不知道该怎么做。jframe有一个pack()方法,我认为这正是我需要的,但是对于jpanel有一些等价的方法,因为jpanel没有这个方法。

    1 回复  |  直到 15 年前
        1
  •  3
  •   bragboy    15 年前

    我不知道你在找什么,但对我来说这很管用。

    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