[英]Action listener does not seem to be firing
我是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
)添加了一個動作監聽器,但是當我運行該程序時,即使將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());
}
});
}
}
我需要幫助來解決此問題。
有關體面的資源,請查看Java和Swing標簽的信息部分:
因此,考慮添加一個主要方法來創建您的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();
}
});
}
編輯
您的代碼還顯示了可能的變量陰影。 您在工具欄類中創建了一個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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.