gpt4 book ai didi

java - 我无法从另一个类设置 JLabel 的文本

转载 作者:行者123 更新时间:2023-12-01 12:41:04 24 4
gpt4 key购买 nike

我有一个 JLabel,我需要从另一个类对其进行 setText。我们将其称为 JLabel soupLabel。

soupLabel 位于 JPanel 类(类扩展 JPanel)中,称为 SoupPage。 SoupPage实际上是mainGUI类的一张卡片。

我有另一个类,称为确认类(类扩展 JFrame)。该类是在 Soup Class 中按下按钮后弹出的。

我尝试从确认类设置文本 soupLabel (位于 Soup 类中),但无济于事。

主GUI

public class mainGUI extends JFrame{
private CardLayout card;

public mainGUI(){
card = new CardLayout();
setLayout(card);
}

private void createSoupPage(){
SoupPage sp = new SoupPage(this);
add(sp, "Soup Page");
}
}

已编辑:带有确认弹出的 SoupPage

public class SoupPage extends JPanel{
mainGUI gui;
public JLabel soupLabel;
public JButton cfmBtn;

public SoupPage(mainGUI gui){
this.gui = gui;

soupLabel = new JLabel("blabla");

cfmBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Confirmation cfmPopUp = new Confirmation();
}
});
}
}

确认

public class Confirmation extends JDialog{
JButton clrBtn;

public Confirmation(){
SoupPage sp = new SoupPage();

clrBtn = new JButton("Clear");
clrBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
sp.soupLabel.setText("some other text bla bla");
}
});
}
}

这是不起作用的部分。

最佳答案

这永远不会起作用。这是因为您正在尝试设置从未添加到 mainGUI 的不同 SoupPage 对象的 soupLabel 文本。您需要做的是设置在 mainGUI 类中声明的 SoupPage 类实例的 souplabel 的文本。您应该做什么?
1. 不要使用 JFrame 进行弹出。将其更改为 JDialog。当任务栏中出现两个图标时,看起来很奇怪,而且可能存在焦点问题。
2. 接下来,为了解决您的实际问题,请在 mainGUI 中的私有(private)方法之外声明一个 SoupPage 实例。然后像这样重新定义您的Confirmation类

  public class Confirmation extends JDialog{
JButton clrBtn;

public Confirmation(SoupPage sp){

clrBtn = new JButton("Clear");
clrBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
sp.soupLabel.setText("some other text bla bla");
}
});
}
}

现在,当从 mainGUI 调用确认时,只需传递在那里声明的实例。更新
尝试一下我修改了所有三个类并进行测试的代码,它将根据您的需求完美地工作

class mainGUI extends JFrame{
private CardLayout card;
private SoupPage sp;

mainGUI(){
card = new CardLayout();
setLayout(card);
}

private void createSoupPage(){
sp = new SoupPage(this);
add(sp,"Soup Page");
}

public void setSoupPageText(String text){
sp.soupLabel.setText(text);
}


}

class SoupPage extends JPanel{
mainGUI gui;
JLabel soupLabel;
JButton cfmBtn;

SoupPage(mainGUI gui){
this.gui = gui;

soupLabel = new JLabel("blabla");

cfmBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Confirmation cfmPopUp = new Confirmation(gui);
}
});
}
}



class Confirmation extends JDialog{
JButton clrBtn;

Confirmation(mainGUI gui){

clrBtn = new JButton("Clear");
clrBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
gui.setSoupPageText("some other text bla bla");
}
});
}
}

关于java - 我无法从另一个类设置 JLabel 的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25095554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com