将未知数量的JComponents添加到JPanel

时间:2012-04-05 23:25:23

标签: java user-interface applet jpanel jscrollpane

美好的一天,

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

如上所述,我可以将这两个Panel添加到applet中,它们显示正常。接下来我要做的是让 InputPanel 能够保存所有列出的随机数量的JComponent对象。这意味着 InputPanel 应该能够抛出JButtons,JLabel,JTextFields等。然后我希望 InputPanel 显示某种滚动功能。

问题在于,由于这两个面板已经在我的applet中,我需要 InputPanel 保持与添加到Applet时给出的大小相同。例如,如果我的applet(来自网络浏览器html代码)的大小为700,700,那么 DisplayPanel 是700乘350,而 InputPanel 是它具有相同的尺寸,我希望能够将大量的JComponents(如按钮)添加到 InputPanel ,面板将保持700 x 350与其所处的位置相同,仅面板如果需要,会有滚动条。

我玩过许多不同的JScrollPane组合,但却无法得到它。

谢谢。

1 个答案:

答案 0 :(得分:0)

美好的一天,

好的,我能够回答我想要做的事情,所以我想我会发一个答案以备将来参考。记住,我的目标是将两个面板连接到JApplet,然后底部面板应该能够接收所需数量的JComponents,并且Applet的大小不会改变,但是底部面板将会可以使用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);
    }

}