Java 在JPanel中动态添加JLabel(重新验证无效)

Java 在JPanel中动态添加JLabel(重新验证无效),java,swing,jpanel,jlabel,Java,Swing,Jpanel,Jlabel,我有一个方法尝试在PackingByVolDialog类的JPanel中动态添加标签: public static void addContent( String content, String container) { contentPanel = new JPanel(); changingLabel = new JLabel(); changingLabel.setText(container+"\n"+content);

我有一个方法尝试在PackingByVolDialog类的JPanel中动态添加标签:

public static void addContent( String content, String container) {

        contentPanel = new JPanel();
        changingLabel = new JLabel(); 
        changingLabel.setText(container+"\n"+content);
        contentPanel.add(changingLabel);
        contentPanel.revalidate();
        contentPanel.repaint();
        dialog.add(contentPanel);
    }
在另一个类中,我调用
addContent
方法,如下所示:

for (int u=0; u<containers.size()-1; u++) {

          PackingByVolDialog.addContent(content, container);

                 } //end for
for(int u=0;u
我正在做的项目太大太复杂了

这就是为什么你在提问时总是需要创建和发布MCVE。我们没有时间查看和理解你的整个项目。这取决于你理解你所问的问题,然后简化代码以复制问题。很多时候,当你这样做时,你会发现你的问题。如果没有,那么你就有一个simp一段要发布的代码

这不是一项容易的任务

一旦你做了几次,就像生活中的任何事情一样,它就会变得越来越容易

我很忙,因为我根本没有时间写新代码

您仍然应该生成结构良好、设计良好的代码。使用正常的Swing编码约定正确地创建MVCE不需要更多的时间

例如:

  • 您不应该扩展JDialog。您所做的只是向对话框中添加组件,以便在main()方法中创建对话框

  • 您不应该使用静态变量和方法。这表明代码的设计很差

  • 类名应以大写字符开头

  • 您的代码无法编译

  • 您从未创建“content”类的新实例,因此从未调用addContent(…)方法。这意味着您甚至从未测试过发布的代码

  • 当你问问题时,你需要花时间把事情做好,并给我们解决问题所需的信息

    窗口中仅显示最后一次输出

    Swing框架和对话框的默认布局管理器是
    BorderLayout
    。您只能将单个组件添加到BorderLayout的“中心”(未指定约束时为默认组件)

    因此,基本上您需要更改对话框的布局管理器。请尝试更改:

    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    dialog.setLayout( new FlowLayout() );
    
    看看有什么不同


    如果您需要更多帮助,请发布一个正确的MCVE。一个实际编译且设计良好的MCVE。

    为什么在将面板添加到对话框之前调用重新验证和重新绘制(由于contentPanel尚不可见,因此没有效果)?您需要重新验证对话框,而不是contentPanel。此代码看起来不正确,包括使用静态交换JPanel和JLabel,避免CardLayout--要获得最佳帮助,请创建并发布有效的,以便我们能够真正了解情况。发布前请阅读链接。“我有一个尝试动态添加标签的方法。。"这里有一个想法。保持面板不变,不要每次都刷新它。保持相同的标签a好吧,只要更改标签文本!@FredK:我更改了代码,对对话框进行了重新验证,然后在将面板添加到对话框后调用它,就像你说的那样!但是没有任何更改,显示相同。这怎么可能是运行时问题的一个示例lem当它甚至不编译时?MCVE需要一个类定义、导入和一个
    main
    方法来将它放在屏幕上。当你认为你有一个时,将它粘贴到IDE中的一个新项目中,编译它,运行它,并检查是否显示了问题。然后确保在编辑问题之前使用IDE为“格式化代码”定义的快捷方式我想添加它。或者像我通常在复制/粘贴注释中所说的那样:使用逻辑和一致的缩进形式来缩进代码行和代码块。缩进的目的是使代码流更易于遵循!谢谢你的回复和建议!我已经解决了这个问题,现在它工作得非常好。好吧,你应该告诉我在我们花时间回答问题之前告诉我们这些。一旦你找到答案,你就应该回答,这样我们就不会花时间回答已经回答过的问题。我本打算稍后发布答案,但你是对的。对此表示抱歉。
    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    dialog.setLayout( new FlowLayout() );