Перерисовка рамки / метки через кнопку - PullRequest
0 голосов
/ 07 ноября 2011

Моя проблема кажется довольно простой, но я застрял на ней несколько месяцев; и теперь, когда это требование о назначении, через два дня я должен сдаться и попросить о помощи.

По сути, у меня есть переменная int (называемая здесь Score) и кнопка, которая изменяет значение этой переменной; это работает. Но у меня также есть отображение текущей стоимости Score, и я хочу, чтобы она изменялась и представляла значение. Тем не менее, он остается на 0 и не меняется вообще.

Я сделал код как можно более простым (в реальном проекте около 15 файлов), который включает эту проблему: кнопку, которая отображает значение Score и увеличивает его. Если бы кто-то мог дать мне решение о том, чтобы отображаемое значение совпадало со значением переменной, это было бы здорово:)

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Main extends JFrame {
public static void main (String [] args) {
new Main();
}

public Main () {
setLocation (100, 100);
setSize (200, 200);
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
Container content = getContentPane();
content.add (new CrisButton ());
setVisible (true);
}

public class CrisButton extends JButton implements ActionListener{

    public int Score;
    CrisButton(){
        setText(""+Score);
        addActionListener(this);
    }

    public void actionPerformed(ActionEvent e){
        System.out.println("Score="+Score);
        Score=Score+2;
        this.repaint();
    }
}

}

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

Вы предполагаете, что, поскольку текст JButton был создан с помощью переменной Score (которая должна начинаться с буквы в нижнем регистре и иметь имя «Score» в соответствии с утвержденным соглашением об именах Java), изменение значения партитур при изменении JButtonзначение текста, но этого просто не произойдет.Вам нужно установить текст JButton самостоятельно через setText, чтобы изменить его текст.

2 голосов
/ 07 ноября 2011

Вы должны использовать this.setText ("" + Score);

Score не действует как указатель, поэтому значение никогда не изменится.Вы должны каждый раз передавать совершенно новую строку.

...