嗨,我需要从 JPanel 更改 JFrame 上的 JLabel。我只能在鼠标移动时更改此设置,但每次得分++时我都需要更改;
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
}
编辑:
我解决了问题。我用过propertyChangeListener .
在 JFrame 中:
panelKwadraty1.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
panelKwadraty1PropertyChange(evt);
}
});
private void panelKwadraty1PropertyChange(java.beans.PropertyChangeEvent evt)
{
if(evt.getPropertyName().equals(PanelKwadraty.ZMIANA_WYNIKU)){
setLabelText(""+evt.getNewValue());
}
}
在 JPanel 中:
int old_score = score;
score++;
this.firePropertyChange(ZMIANA_WYNIKU, old_score, score);
最佳答案
根据您提供的代码,我假设 jLabel1 是公共(public)的,因为您在面板的方法中调用它。
因此,我认为您的问题可能是当您移动鼠标时会发生很多变化,并且标签没有足够快地重新绘制。为了确保其重绘尽快发生,请使用以下代码:
private void setLabelText(String text)
{
jLabel1.setText(text);
jLabel1.paintImmediately(jLabel1.getVisibleRect());
}
希望就是这样。
关于java - 如何从 JPanel swing 更改 JFrame 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5848878/