有 Java 编程相关的问题?

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

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

我有一个方法尝试在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

这是MCVE(?)我被要求做出(我希望它是正确的和有帮助的)

public class VolDialog extends JDialog {

    private static JLabel label = new JLabel() ;
    private static JPanel contentPanel = new JPanel();
    private static VolDialog dialog = new VolDialog(); 


  public static void main(String[] args) {
        try {
             dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
             dialog.add(contentPanel);
             dialog.revalidate();
             dialog.repaint();
            dialog.setVisible(true);
    } catch (Exception e) {
        e.printStackTrace();
    }
}


 public static void addContent( String text) {

    contentPanel = new JPanel();
    changingLabel = new JLabel(); 
    changingLabel.setText(text);
    contentPanel.add(changingLabel);
    }


 public class content {

       for (int u=0; u<N; u++) {

               VolDialog.addContent("text");

             } //end for
          }

即使在使用JPanel的repaintrevalidate时,窗口中也只显示最后的输出

有人知道问题出在哪里吗


共 (1) 个答案

  1. # 1 楼答案

    The project I am doing is too big and complicated

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

    it is not an easy task.

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

    I was in a rush because I don't have time at all to write new codes

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

    例如:

    1. 您不应该扩展JDialog。您所做的只是将组件添加到对话框中,这样在main()方法中就可以创建对话框

    2. 您不应该使用静态变量和方法。这表明代码设计不当

    3. 类名应以大写字符开头

    4. 你的代码无法编译

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

    当你问这个问题时,你需要花时间把事情做好,并向我们提供解决问题所需的信息

    only the last output is displayed in the window.

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

    所以基本上你需要改变对话框的布局管理器。尝试改变:

    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    dialog.setLayout( new FlowLayout() );
    

    看看有什么不同

    如果你需要更多的帮助,那么发布一个合适的MCVE。一个能够真正编译并且设计良好的程序