Java 类中的第二个addActionListener未打开新窗口
因此,我一直在使用GUI,并为我的用户创建了一个相对不错的欢迎框架。Java 类中的第二个addActionListener未打开新窗口,java,swing,Java,Swing,因此,我一直在使用GUI,并为我的用户创建了一个相对不错的欢迎框架。 该框架有两个文本选项,理论上,每个文本选项都应该打开一个新窗口 其中一个文本框的功能与预期完全相同,可以根据需要打开一个新窗口,而另一个则不能 以下是我的代码: package gui; import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets;
该框架有两个文本选项,理论上,每个文本选项都应该打开一个新窗口 其中一个文本框的功能与预期完全相同,可以根据需要打开一个新窗口,而另一个则不能 以下是我的代码:
package gui;
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Frame1Welcome extends JFrame {
private JLabel intro1 = new JLabel(
"Welcome to Twitter Farmer.");
private JLabel intro2 = new JLabel(
"In order to start farming up those tweets, first decide if you want to farm for a specific amount of time, or farm a certain amount of tweets.");
private JLabel intro3 = new JLabel(
"By specifying the amount of time you wish to farm for, Twitter Farmer will gather as many tweets as it can in said time.");
private JLabel intro4 = new JLabel(
"If you know how many you want however, Twitter Farmer will instead gather up the exact desired amount.");
private JLabel intro5 = new JLabel(
"Please enter the time in seconds, or the amount of tweets as whole number, and press the 'ENTER'-key.");
private JLabel tweets = new JLabel("Tweets:");
private JLabel time = new JLabel("Time:");
private JTextField twitterText = new JTextField(10);
private JTextField timeText = new JTextField(10);
private String inputText; // REMOVE ME
public Frame1Welcome(String title) {
super(title);
launchGUI.setMyDefaults(this, 800, 300);
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(0, 0, 10, 0);
JPanel northernPanel = new JPanel(new GridBagLayout());
this.add(northernPanel, BorderLayout.NORTH);
gbc.gridy = 0;
northernPanel.add(intro1, gbc);
gbc.gridy = 1;
northernPanel.add(intro2, gbc);
gbc.gridy = 2;
northernPanel.add(intro3, gbc);
gbc.gridy = 3;
northernPanel.add(intro4, gbc);
gbc.gridy = 4;
northernPanel.add(intro5, gbc);
JPanel southernPanel = new JPanel(new GridBagLayout());
this.add(southernPanel, BorderLayout.CENTER);
gbc.gridx = 0;
southernPanel.add(tweets, gbc);
gbc.gridx = 1;
southernPanel.add(twitterText, gbc);
gbc.gridy = 1;
gbc.gridx = 0;
southernPanel.add(time, gbc);
gbc.gridx = 1;
southernPanel.add(timeText, gbc);
twitterText.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
inputText = twitterText.getText(); // REMOVE ME
dispose();
System.out.println("TWEETS:" + inputText); // REMOVE ME
try {
new Frame3Tweets("Twitter Farmer - Tweet-farm by desired amount", Integer.parseInt(timeText.getText()));
} catch (NumberFormatException error) {
//ADD INVALID NUMBER WINDOW
}
}
});
timeText.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
inputText = timeText.getText(); // REMOVE ME
dispose();
System.out.println("TIME:" + inputText); // REMOVE ME
try {
new Frame2Time("Twitter Farmer - Tweet-farm over desired time", Integer.parseInt(timeText.getText()));
} catch (NumberFormatException error) {
//ADD INVALID NUMBER WINDOW
}
}
});
}
}
首先,所有注释都只是为了提醒我代码后面要做的事情
其次,假设launchGUI.setMyDefaults(这是800300)
只是我设置大小和可见性的方法,它适用于其他窗口
第三,假设newframe2time
和newframe3tweets
都是功能性的
因此,我的问题是:
为什么timeText.addActionListener
创建一个新窗口,而twitterText.addActionListener
不创建
我试着让twitterText.addActionListener在用户给出一个数字后也创建其他窗口,而不会弹出任何这样的窗口
有人能告诉我我做错了什么,最好是如何修复它吗?通过采纳Maroun Maroun的建议,并添加一个
错误。printStackTrace()
我能够扣除我的问题:
try {
new Frame3Tweets("Twitter Farmer - Tweet-farm by desired amount", Integer.parseInt(timeText.getText()));
} catch (NumberFormatException error) {
error.printStackTrace();
}
该方法将timeText.getText()
作为参数,该参数为空,因此强制所有内容崩溃和烧录
它应该使用具有值的tweetText.getText()
所以,孩子们,听从Maroun Maroun的建议,不要让你的
catch
块空白 将catch
块留空是一种不好的做法。你可能会得到一个例外,但你不知道你是,因为你抓住它,什么也不做。甚至都没有显示。当任何一个领域被操作时,主框架会关闭吗?啊,你知道,没有比自学更好的学习方法了。我接受了您的建议@marounnaroun并添加了一个错误。printStackTrace()为我提供了所有答案。我一会儿就回答我自己的问题!非常感谢。另见