当前位置: 首页 > 知识库问答 >
问题:

将面板添加到面板

壤驷经国
2023-03-14

我正在构建一个Java程序。该程序的核心在JFrame中可视化,其中包含一个JMenuBar和各种JMenuItem和JMenu。关键是我在所有框架中添加了一个centralPanel,但是如果我在centralPanel中添加了一些内容,那么只有在调整主框架的大小、缩小或放大它时,它才会显示出来!代码如下:

这是构造函数

    public UserFrame(Sistema system)
    {
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    this.setSize(screenSize.width, screenSize.height);
    storicoPanel = new JPanel();
    carrelloPanel = new JPanel();
    carrelloFrame = new JFrame();
    pane = new JScrollPane(storicoArea);
    close = new JButton("Chiudi");
    this.sistema = system;
    menu = new JMenuBar();
    this.setJMenuBar(menu);

    centralPanel = new JPanel();
    add(centralPanel);

在这里,我添加了中央面板,在这里,在ActionListener中,我试图添加一些东西,但它不起作用:

public ActionListener createVisualizzaStorico(final ArrayList<Acquisto> array)
{
    class Visualize implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        storicoPanel.removeAll();
        for(Acquisto a : array)
        {
            Articolo temp = a.getArticolo();
            if(temp instanceof Vacanza)
                storicoPanel.add(new VacanzaPanel((Vacanza)temp));
            else if(temp instanceof BeneDiConsumo)
                storicoPanel.add(new BeneDiConsumoPanel((BeneDiConsumo)temp));
            else if(temp instanceof Cena)
                storicoPanel.add(new CenaPanel((Cena)temp));
            else 
                storicoPanel.add(new PrestazioniOperaPanel((PrestazioneOpera)temp));

        }

        centralPanel.add(storicoPanel);
        centralPanel.repaint();

你能帮帮我吗?谢谢!

共有2个答案

阮阳曦
2023-03-14

试试这些。。

centralPanel.updateUI(); // or    
SwingUtilities.updateComponentTreeUI(getRootPane());

>

  • 在SwingUtilities中执行帧代码。invokeLater()

    代替repaint()调用updateUI()SwingUtilities.updateComponentTreeUI(getRootPane()来更新用户交互界面。

  • 宫俊远
    2023-03-14

    使用卡片布局,而不是尝试添加和删除组件/面板。这里干净多了,你不必担心可能出错的事情,比如你现在面临的情况。

    请参阅此示例以了解它是多么简单和干净。另请参见如何使用CardLayout教程

    旁注

    >

  • 一个组件只能有一个父容器。虽然我不认为这会给你带来问题。很高兴知道。首先,我看到您试图将storicoPanel添加到从未添加到中心面板的JScrollPane中。然后将storicoPanel添加到中央面板。此后,JScrollPane将不再是父级。

    我不确定你在使用这个carrelloFrame=new JFrame();做什么,但是你的类已经是一个JFrame,为什么还要创建另一个?

    仅供参考,动态添加组件时,需要重新验证()和重新绘制()。不过,在您的情况下,我完全反对添加和删除组件,因为这看起来是一个完美的卡片布局案例。

  •  类似资料:
    • 我试图通过点击JButton将一张新卡添加到现有的JPanel(cardLayout)中,然后转到该新卡,但由于新卡未注册,我得到了空异常。 我试着在谷歌上搜索,但找不到和示例,我试着用 但什么都不管用,这是可能的吗?如果是的话,有人知道任何例子吗? 代码如下,jPanelSliding1。NextSlidePanel只需移动到CardLayout中选定的JPanel。此处创建的新面板由于找不到面

    • 我有网格面板。我想将树面板添加到该网格面板中的列中。 网格面板 树商店 例如,如果我想把这个树存储在下,也就是说,当我们点击Lisa时,树会扩展。我们怎么能做到呢。 谢谢你。

    • 问题内容: 我有3个JPanels,我想将它们全部放在一个JPanel中。我将GridBagLayout用于主面板。但是只添加了一个面板。为什么会这样呢? 定制程序方法是将项目添加到这些面板中的方法。 问题答案: 我不确定,但是我认为您需要在GridBagLayout中添加一个GridBagConstraints。尝试查看此站点,以获取有关如何使用GridBagLayout的想法: 链接 或者也许

    • 下面是表类: 我尝试了几种方法,比如在ActionEvent上使用repaint,或者直接在table类中使用repaint.......如果我添加直接进入主jframe构造函数工作,但从操作上它就不工作了,所以我有点没有选择了,所以有人能帮我一把吗?

    • 我目前正在尝试对我的实现一个操作侦听器,以便在选择它时,它将打开一个供用户选择他们希望GUI使用的文件。对于初学者,我如何让控制台打印出“框单击!”当用户选中该框时? 它已经有一段时间,因为我已经在摇摆编程,所以任何建议都有帮助!

    • 在 HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall 下创建一个以你的产品名为名的项,就可以向控制面板中的添加/删除程序添加一个条目。对于 Windows NT (NT4/2000/XP),可能还要在 HKCU 下创建项,而且这将只能显示给当前用户。这里有许多可以写入关于你的应用程序和卸载程序的信息的值项。可以通过 WriteRegS