有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java向JPanel添加未知数量的JComponents

你好

我正在构建一个Applet(确切地说是JApplet),并将其分为两个面板。顶部面板称为DisplayPanel,这是一个扩展JPanel的自定义类。底部面板称为InputPanel,它也扩展了JPanel

如上所述,我可以将这两个面板添加到小程序中,它们显示良好。我想做的下一件事是让InputPanel能够容纳随机数目的JComponent对象,所有对象都真实地列出。这意味着输入面板应该能够向其抛出JButtons、jlabel、JTextFields等。然后我想让InputPanel显示某种滚动功能

问题是,由于这两个面板已经在我的小程序中,我需要InputPanel保持与添加到小程序时给定的大小相同。例如,如果我的小程序(来自web浏览器html代码)的大小为700700,然后显示面板的大小为700×350,而输入面板的大小与它的大小相同,那么我希望能够添加许多JC组件,比如按钮,对于输入面板,面板将保持700 x 350在其所在的相同位置,如果需要,只有面板将具有滚动条

我已经玩过许多不同的JScrollPane组合,但就是无法得到它

谢谢


共 (1) 个答案

  1. # 1 楼答案

    你好

    好的,我能够回答我想做的事情,所以我想我会发布一个答案,供将来参考。记住,我的目标是将两个面板连接到JApplet上,然后底部面板应该能够根据需要容纳尽可能多的JComponents,小程序的大小不会改变,但是底部面板将可以用JScrollPane滚动

    如果您在顶部面板中选择了一个对象,然后在面板下方显示了一个可以控制所选对象的面板,那么这将非常有用。我正在制作一个网络模拟器,在上面的面板中有一个网络图,你可以选择一个主机,然后设置它的IP地址。但是如果你选择了防火墙,你可以决定屏蔽哪些端口

    我希望这能有所帮助,并感谢@Andrew Thompson

    import java.awt.Dimension;
    
    import javax.swing.BoxLayout;
    import javax.swing.JApplet;
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    
    
    public class Applet extends JApplet
    {
        JPanel p1;
        JPanel p2;
        JPanel p3;
    
        JScrollPane s1;
    
    
    
        public Applet()
        {
            p1 = new JPanel();
            p2 = new JPanel();
            p3 = new JPanel();
    
            s1 = new JScrollPane(p3,s1.VERTICAL_SCROLLBAR_ALWAYS,s1.HORIZONTAL_SCROLLBAR_ALWAYS);
    
    
        }
    
        @Override
        public void init()
        {
            super.init();
            for(int i=0;i<100;i++)
            {
                p3.add(new JButton("Hello"));
                p3.add(new JLabel("blah"));
                p3.add(new JButton("Sup"));
            }
    
            p1.setPreferredSize(new Dimension(this.getWidth(), this.getHeight()));
            p2.setPreferredSize(new Dimension(this.getWidth(),(int) (this.getHeight()*0.6667)));
    
            p3.setLayout(new BoxLayout(p3,BoxLayout.PAGE_AXIS));
            s1.setPreferredSize(new Dimension(this.getWidth(),(int)(this.getHeight()*0.33333)));
    
            p1.add(p2);
            p1.add(s1);
    
            this.add(p1);
        }
    
    }