我有一个 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/