gpt4 book ai didi

java - Action 监听器似乎没有被触发

转载 作者:行者123 更新时间:2023-12-02 05:23:14 25 4
gpt4 key购买 nike

我是 Java 编程语言的新手,我尝试编写一个简单的代码

public class TextPanel extends JPanel {

private JTextArea textArea;

public TextPanel() {
textArea = new JTextArea();

setLayout(new BorderLayout());
setVisible(true);

add(new JScrollPane(textArea), BorderLayout.CENTER);
}

public String getTextAreaText() {
String text = textArea.getText();

return text;
}
}

我向星形按钮(startBtn)添加了一个 Action 监听器,但是当我运行程序时,即使我放置了System.out.println(textPanel.getTextAreaText),控制台中也没有显示任何内容())actionPerformed() 方法中(代码如下)。

public class Toolbar extends JPanel {

private JButton startBtn;
private JButton stopBtn;
private TextPanel textPanel;

public Toolbar() {
startBtn = new JButton("Start");
stopBtn = new JButton("Stop");
textPanel = new TextPanel();

setLayout(new FlowLayout(FlowLayout.LEFT));
add(startBtn);
add(stopBtn);

startBtn.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println(textPanel.getTextAreaText());
}
});
}
}

我需要帮助来解决这个问题。

最佳答案

  1. Java 程序需要公共(public)静态 main 方法才能运行。您的代码没有这个,因此您的程序没有起点
  2. Swing GUI 要求将组件放置在顶级窗口(例如 JFrame)中,并且显示该窗口以便可以看到组件。你的代码没有这个。
  3. 您需要阅读 Java 和 Swing 教程,因为其中对所有内容都有很好的解释,并附有示例代码。
<小时/>

要获得不错的资源,请查看 Java 和 Swing 标记的 info 部分:

因此请考虑添加一个 main 方法来创建 JFrame 并向 JFrame 添加组件,例如:

private static void createAndShowGui() {
JFrame frame = new JFrame("My JFrame");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

// add your components to your JFrame here

frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

// the main method which Java uses as the starting point for your program
public static void main(String[] args) {

// let's call our Swing GUI in a thread-safe manner
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
<小时/>

编辑
您的代码还显示了可能的变量阴影。您在 Toolbar 类中创建了一个 TextPanel 对象,但将此 TextPanel 添加到了空。这表明您可能在其他地方有一个正在显示的 TextPanel 对象(我们只能猜测,因为您似乎没有显示足够的代码让我们确定)。如果是这样,那么按开始按钮将从未显示工具栏的 JTextArea 中获取文本。相反,请考虑将 TextPanel 引用传递到工具栏,如下所示:

class Toolbar extends JPanel {

private JButton startBtn;
private JButton stopBtn;
private TextPanel textPanel;

public Toolbar() {
startBtn = new JButton("Start");
stopBtn = new JButton("Stop");
// textPanel = new TextPanel(); // *** note change

setLayout(new FlowLayout(FlowLayout.LEFT));
add(startBtn);
add(stopBtn);

startBtn.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent evt) {
if (textPanel != null) {
System.out.println(textPanel.getTextAreaText());
}
}
});
}

// **** note this method ****
public void setTextPanel(TextPanel textPanel) {
this.textPanel = textPanel;
}
}

然后在创建对象时,传入您的引用:

private static void createAndShowGui() {

Toolbar toolBar = new Toolbar();
TextPanel textPanel = new TextPanel();

toolBar.setTextPanel(textPanel); // ****** passing in my reference *******

JFrame frame = new JFrame("Add New Lines");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(textPanel);
frame.getContentPane().add(toolBar, BorderLayout.PAGE_START);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

关于java - Action 监听器似乎没有被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26319688/

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