我很遗憾地重新粉碎了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;
}
答案 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);