Java 从另一个类更改JLabel文本
我有一个绘制标签的类。(我在这里只给出了部分代码)。一切正常,标签就会显示出来 现在,我有另一个类叫做Java 从另一个类更改JLabel文本,java,swing,Java,Swing,我有一个绘制标签的类。(我在这里只给出了部分代码)。一切正常,标签就会显示出来 现在,我有另一个类叫做Callerclass。我有一个方法,我将使用它来更改这个标签的值。我该怎么做 public class MyClass{ private JLabel label; MyClass(){ run(); } public void editTheLabelsValue (String text) { label.setText(te
Caller
class。我有一个方法,我将使用它来更改这个标签的值。我该怎么做
public class MyClass{
private JLabel label;
MyClass(){
run();
}
public void editTheLabelsValue (String text) {
label.setText(text);
frame.repaint();
}
run(){
.... // there were more code here, i removed it as it's not relevant to the problem
label = new JLabel("Whooo");
label.setBounds(0, 0, 50, 100);
frame.getContentPane().add(label);
.....
}
稍后,我将使用以下类更改上述标签的文本。我怎样才能做到这一点
public class Caller {
void methodA(){
MyClass mc = new MyClass();
mc.editTheLabelsValue("Hello");
}
}
1.)执行methodA()时,标签字段上不会显示文本
Hello
。它仍然是Whooo
。我怎样才能纠正这个问题。执行该方法后,我希望标签文本为Hello
我能看到的直接问题是,您可能正在使用null
布局,或者您不了解布局管理器是如何工作的
下面的代码通过setText
方法调用从子类中的主类更新标签。此方法每秒调用一次
public class PaintMyLabel {
private int counter = 0;
public static void main(String[] args) {
new PaintMyLabel();
}
public PaintMyLabel() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
final MasterPane master = new MasterPane();
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(master);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
counter++;
master.setText("Now updated " + counter + " times");
}
});
timer.setRepeats(true);
timer.setCoalesce(true);
timer.start();
}
});
}
public class MasterPane extends JPanel {
private JLabel label;
public MasterPane() {
label = new JLabel("Original text");
setLayout(new GridBagLayout());
add(label);
}
public void setText(String text) {
label.setText(text);
}
}
}
如果您使用的是
null
布局,请停止它。别这样。您使用null
布局的次数很少,我怀疑这不是其中之一。您的代码似乎按照指定的方式工作。如果它不起作用呢?当执行methodA()
时,文本Hello
不会显示在标签字段上。它仍然保持为Whooo
正在调用label.setBounds(0,0,50,100)代码>?除非您正在阻止EDT,否则此代码应该有效。另外,frame.repaint()是不必要的,而且效率太低。如果你想不出一个解决方案,试着发布一个。这样做会让你自己找到问题,或者在这个论坛上发布一个例子,让人们直接回答你的问题并给出清晰的解释。我强烈建议你试试。@Reimeus打字错误,我会改正的