Java 如何从JPanel swing更改JFrame标签
嗨,我需要更改JFrame上的JLabel,来自JPanel。我只能在鼠标移动时更改此设置,但每次当score++时我都需要更改Java 如何从JPanel swing更改JFrame标签,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,嗨,我需要更改JFrame上的JLabel,来自JPanel。我只能在鼠标移动时更改此设置,但每次当score++时我都需要更改 private void panelKwadraty1MouseMoved(java.awt.event.MouseEvent evt) { jLabel1.setText("Twoj wyn
private void panelKwadraty1MouseMoved(java.awt.event.MouseEvent evt)
{
jLabel1.setText("Twoj wynik to: "+panelKwadraty1.getScore());
}
我需要在以下时间进行更改:
if (kwadrat[i].sprawdzKolizje(belka) == 1)
{
kwadrat[i]=new Kwadrat(kwadrat[i].getKolor());
score++;
// Jframe.jLabel1.setText("Your score is :" + score); <--- i need do that
}
在JPanel中:
int old_score = score;
score++;
this.firePropertyChange(ZMIANA_WYNIKU, old_score, score);
在JFrame中公开
jLabel1
,以便JPanel可以访问它。如果JFrame和JPanel都属于同一个类,那么只需将jLabel1
设置为全局,JPanel就可以访问它。根据您提供的代码,我假设jLabel1是公共的,因为您在面板的方法中调用它
因此,我认为您的问题可能是,当您移动鼠标时,会有很多更改,并且标签没有足够快地重新绘制。要确保尽快重新绘制,请使用以下代码:
private void setLabelText(String text)
{
jLabel1.setText(text);
jLabel1.paintImmediately(jLabel1.getVisibleRect());
}
希望是这样。控件是否进入if()??如果它们位于同一窗口中,则不必将其引用为JFrame.JLabel。。您只需公开JLabel并调用该方法
jLabel1.setText()
simple。。您能告诉我们更多有关组件放置位置的信息吗?这是jFrame中的一个公共字段jLabel1?好的,但如何访问它?我没有JFrame变量@mientus:两个[jFrame,jPanel]在同一个班级吗?@mientus:看起来两个都在不同的班级。在这种情况下,通过将jLabel1
声明为public或使其具有getter方法,使其公开可用。然后在jPanel所在的类中,您必须创建一个包含jFrame的类的实例,然后执行您的工作。jFrame和jPanel不是同一个类。@meintus:然后看看我在您之前发布的注释。@mientus我有一些代码,我将编辑到当前的答案中,这将显示您只需获取标签即可。目前我已过期了当天的最大编辑数;D
private void setLabelText(String text)
{
jLabel1.setText(text);
jLabel1.paintImmediately(jLabel1.getVisibleRect());
}