所以我试图让JLabel在这段代码中工作。我可以让按钮和Action Listener工作,但不能使用Label。 MyDice是我创建面板和按钮的地方。
public class MyDice
{
public static void main(String[] args)
{
JFrame frame = new JFrame("MyDice v1.0");
frame.setSize(800,600);
frame.setLocation(560, 240);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setBackground(new Color(200,200,200));
panel.setSize(800,600);
frame.add(panel);
panel.setVisible(true);
JButton button_d4 = new JButton("Roll d4");
panel.add(button_d4);
button_d4.addActionListener (new MyRoll(4,panel));
}
}
当我点击按钮时,MyRoll就是我获得Action Listener的地方。
public class MyRoll implements ActionListener
{
int dice;
JPanel panel;
public MyRoll (int dice, JPanel panel)
{
this.dice = dice;
this.panel = panel;
}
public void actionPerformed(ActionEvent e)
{
rollDice(dice,1);
}
public void rollDice (int dice, int times)
{
int r=0;
for (int i=0; i<times;i++)
{
double rand = Math.random();
rand = rand*dice + 1;
r = (int) rand;
}
System.out.println("You rolled "+r+" out of "+dice);
JLabel output = new JLabel();
output.setText("You rolled "+r+" out of "+dice);
panel.add(output);
}
}
但是,最后一部分不起作用。有什么想法吗?
答案 0 :(得分:2)
使用JLabel并在逻辑中设置标签消息
修订更新后的代码
您应该在逻辑之外设置标签,使用初始空值添加到面板,然后在逻辑上更改标签的值
即
//Setting up your GUI
JLabel label = new JLabel("");
panel.add(label);
//Within your Logic method
System.out.println("Printing info");
label.setLabel("Printing info");
这样你就不会经常向你的Panel添加JLabel
答案 1 :(得分:2)
请查看以下代码:
JLabel output = new JLabel();
output.setText("You rolled "+r+" out of "+dice);
panel.add(output);
每次单击按钮时,您都会在面板中添加一个新JLabel
(恰好位于主框架中)。但是,你没有什么可以告诉它重绘自己。
我建议解决此问题的方法是创建JLabel
并将其添加到JPanel
中的main()
,并将JLabel引用传递给MyRoll
类。然后,您可以随时拨打setText()
。您确实不需要JPanel
中MyRoll
的引用;您只需要引用JLabel
。
p.s。我想对您的main()
方法发表一些评论。特别是,如果以不同方式组织代码,可以稍微简化一下。通常,创建Swing GUI遵循以下步骤:
创建JFrame
。
创建JPanel
。
将组件添加到JPanel
。
将JPanel
添加到JFrame
。
设置JFrame
可见。
请注意,您只需要在setVisible()
上致电JFrame
,如果您最后这样做的话。这将自动调用setVisible()
及其所有子组件上的JPanel
。
答案 2 :(得分:0)
如果您正在寻找刷新方法,那么我就不知道。 相反,您可以设置一个线程,根据您提供的逻辑更新输出。