JButtons автоматически обновляет? - PullRequest
2 голосов
/ 10 февраля 2012

Скажем, у меня есть JButton, называемый b, и я:

b.setText(""+someIntVariable)

И я add() это к соответствующему JFrame. Если позже моя программа изменит значение someIntVariable, будет ли текст JButton автоматически обновляться в моем графическом интерфейсе? Или я должен что-то сделать, чтобы обновить его?

Ответы [ 3 ]

3 голосов
/ 10 февраля 2012

Текст JButton не будет обновляться автоматически.Он получает строковое представление, которое вы создали с помощью ""+someIntVariable.Даже если вы передадите только саму переменную int (что невозможно, но давайте предположим, что это так), это будет копия целого числа, а не исходное значение.Теперь есть способ получить указатель на целое число, чтобы увидеть, что оригинал изменился, и даже если бы был какой-то способ, целое не могло бы сообщить JButton, что оно изменилось.* Могут быть способы создания кнопок, подобных этой.Я не думаю, что использование JButton является одним из таких способов, но могут быть классы кнопок в других средах, которые могут обрабатывать что-то подобное.Но вам нужно будет использовать более сложный тип данных в качестве переменной, которую вы передаете.

3 голосов
/ 10 февраля 2012

Как только кнопка добавлена ​​в JFrame, в ней будет показан исходный текст, который вы задали в качестве параметра.Если вы хотите изменить текст, вам нужно будет снова позвонить b.setText(""+someIntVariable).Однако вам не нужно будет add передавать его в JFrame.

Это потому, что вы ссылаетесь на значение , хранящееся в someIntVariable, а не на саму переменную.Поэтому, если значение изменяется, оно не будет автоматически обновляться.

0 голосов
/ 20 февраля 2012

Вы можете изменить ярлык кнопки следующим образом:

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

public class demoframe extends JFrame implements ActionListener {

    String label=new String("Init Label");
    JButton b1=new JButton(label);
    JButton b2=new JButton("Action");
    demoframe()
    {
        this.add(b1);
        this.add(b2);
        b2.addActionListener(this);
    }
    public static void main(String arg[])
    {
        demoframe d=new demoframe();
        d.setSize(200, 200);
        d.setVisible(true);
        d.setLayout(new FlowLayout());
    }
    public void actionPerformed(ActionEvent e) 
    {
        label="New Label";
        b1.setText(label);
    }
}
...