【问题标题】:revalidate JPanel in GUI bUilder在 GUI 构建器中重新验证 JPanel
【发布时间】:2011-02-09 22:44:16
【问题描述】:

我很难在 Gui builder 中重新绘制 JPanel,任何人都可以帮助我。 这是在其构造函数中生成随机数的主类

public class Main {
public static int q;
public Main(){

     Random randomGenerator = new Random();
            for (int idx = 1; idx <= 10; ++idx) {
                q = randomGenerator.nextInt(100);
            }
}

这是 A 类中的按钮单击事件,其中包含 JPanel 作为自定义代码

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    new Main();
    Jpl jpl=new Jpl();   

}

这是一个作为自定义组件添加到 A 类的类

public class Jpl extends JPanel {

public Jpl() {
    printMe(Main.q);
}


public int printMe(int q) {
        removeAll();
    for (int i = 0; i <q; i++) {
        System.out.println("rinting lable");
        String htmlLabel = "<html><font color=\"#A01070\">" + i + " New Lable </font></html>";
        JLabel lbl = new JLabel(htmlLabel);
        setLayout(new GridLayout(0, 1));
        add(lbl, Jpl.RIGHT_ALIGNMENT);
        lbl.setForeground(Color.BLUE);
        Border border = BorderFactory.createLineBorder(Color.lightGray);
        lbl.setBorder(border);
        lbl.add(new JSeparator(SwingConstants.HORIZONTAL));

        lbl.addMouseListener(new MouseAdapter() {

            @Override
            public void mousePressed(MouseEvent e) {
                JLabel label = (JLabel) e.getSource();
                JOptionPane.showMessageDialog(null, "You Slected");
                System.out.println(label.getText() + "NO AKKA is Selected");
            }
        });
    }

    revalidate();
    repaint();
    return 1;

}

【问题讨论】:

    标签: java swing jpanel


    【解决方案1】:

    一个问题:在您的 ActionListener 代码中,您创建了一个新的 JPanel(或 Jpl)对象:

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        Jpl jpl=new Jpl();
        int a= jpl.printMe(4);
    }
    

    但是绝对不可能这是显示在您的 GUI 中的 Jpl 对象。是的,它是同一个类的对象,但它是一个全新的与正在显示的对象不同且截然不同的对象,因此在其上调用方法不会对显示的 Jpl 对象产生影响。解决方案是仅在显示的对象上调用您的方法。我无法告诉您如何获取对该对象的引用,因为我们不知道您显示它的其余代码。

    另一个问题是你没有在这篇文章中提出问题,所以我不知道我的建议是否会帮助你解决主要问题(但我知道它会解决 a 问题)。因此,我建议您提出一个适当的问题,以便我们更好地理解这些问题,并且您可能需要发布更多代码。

    【讨论】:

    • “实际上我忘了粘贴正确的代码”——太好了,你还没有提出一个可行的问题。想纠正这些缺陷吗?
    • 实际上我在我的另一个类中添加这个 JPanel 作为自定义 JPanel,如果单击按钮时这个 JPanel 出现新值,我想更新这个面板。你可以说同样的刷新按钮可用的无线网络。这与我尝试在我的 gui 页面中使用 Netbeans 实现的完全一样
    • 让我重复一遍:请编辑您的原始帖子,粘贴正确的代码,然后提出一个可行的问题。请告诉我如何以这样的方式提出此请求你会相信它会对你和我们都有帮助。
    • 我已经编辑了我的代码看看那个。但是问题很简单,在 Gui builder 页面中如何更新自定义 JPanel 组件。当我单击按钮时,新值应该显示在 Japnel 中。我希望这次你会选择我的问题。谢谢。
    【解决方案2】:

    不清楚你在问什么,所以我只想发布关于你代码中的问题的 cmets。

    printMe()返回一个int,但始终是同一个值,所以没有意义。只需创建方法void

    String htmlLabel = "New Label+ i"; 这总是会产生相同的字符串,不会给你i 的值。相反,你想要String htmlLabel = "New Label" + i;

    您没有对循环中的JLabels 做任何事情,因此在当前迭代结束后将不再引用每个对象。接下来,您的MouseListener 将永远不会被触发,因为您添加它的标签永远不会出现在 GUI 中。

    【讨论】:

      【解决方案3】:

      除了其他人提到的问题:

      您正在创建标签,但没有将它们添加到 JPanel。试试这个:

      JLabel lbl = new JLabel(htmlLabel);
      this.add(lbl);
      

      【讨论】:

      • 对不起,实际上我已经添加了我忘了过去正确的代码,但我已经有 add() 方法 removeAll(); for (int i = 0; i " + i + " 新标签
      猜你喜欢
      • 2016-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2020-03-31
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多