在GUI bUilder中重新验证JPanel

时间:2011-02-09 22:44:17

标签: java swing jpanel

我很遗憾地重新粉碎了Gui建造者的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;

}

3 个答案:

答案 0 :(得分: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 问题)。因此,我建议您提出正确的问题,以便我们更好地了解问题,并且您可能需要发布更多代码。

答案 1 :(得分:1)

目前尚不清楚你在问什么,所以我只想在你的代码中发表关于问题的评论。

printMe()会返回int,但它始终是相同的值,因此没有任何意义。只需制作方法void

String htmlLabel = "New Label+ i";这将始终生成相同的字符串,并且不会为您提供i的值。相反,你想要String htmlLabel = "New Label" + i;

您在循环中没有使用JLabel进行任何操作,因此在当前迭代结束后将不再引用每个对象。继续此操作,您的MouseListener将永远不会被触发,因为您添加它的标签将永远不会出现在GUI中。

答案 2 :(得分:1)

除了其他人提到的问题:

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

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