【问题标题】:Adding an unknown number of JComponents to a JPanel向 JPanel 添加未知数量的 JComponent
【发布时间】:2012-04-05 23:25:23
【问题描述】:

早安,

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

如上所述,我可以将这两个面板添加到小程序中,它们可以正常显示。我想做的下一件事是让 InputPanel 能够保存随机数量的 JComponent 对象,所有这些对象都是垂直列出的。这意味着 InputPanel 应该能够向其抛出 JButton、JLabels、JTextField 等。然后我希望 InputPanel 显示某种滚动功能。

问题在于,由于这两个面板已经在我的小程序中,我需要 InputPanel 保持与添加到小程序时相同的大小。例如,如果我的小程序(来自网络浏览器的 html 代码)的大小为 700,700,然后 DisplayPanel 为 700 x 350,而 InputPanel 在下方它具有相同的尺寸,然后我希望能够在 InputPanel 中添加许多 JComponents,如按钮,并且面板将保持 700 x 350 的相同位置,只有面板如果需要,会有滚动条。

我玩过很多不同的 JScrollPane 组合,但就是搞不定。

谢谢。

【问题讨论】:

  • 1) 您有问题吗? 2) 有关向JScrollPane 动态添加标签的示例,请参阅Nested Layout Example。 3) 为了尽快获得更好的帮助,请发布SSCCE。 4) 小程序比基于框架的应用程序更难开发和部署。即使只是打算作为小程序提供,我也很难将此代码开发为混合应用程序/小程序。
  • @AndrewThompson,感谢您提供的信息。我确实喜欢SSCCE,我以前从未听说过。我没有很好地解释我的问题。再次感谢!明天我会改写和改写。
  • “我没有很好地解释我的问题。” 你也没有做得很差。我想我了解此 GUI 所需的基本效果,但认为嵌套布局与链接示例中动态添加组件的技巧相结合,应该足以让您入门。如果事实证明您仍然面临问题,那么制作 SSCCE 肯定会让人们更容易提供帮助(尤其是当他们可以复制/粘贴代码、编译代码、查看问题、调整修复它所需的几行代码时,&将编辑后的代码作为答案发布)。 ;)

标签: java user-interface applet jpanel jscrollpane


【解决方案1】:

早安,

好的,我能够回答我正在尝试做的事情,所以我想我会发布一个答案以供将来参考。请记住,我的目标是将两个面板附加到 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);
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2013-03-28
    • 2010-12-26
    相关资源
    最近更新 更多