Java: 我不能把我的 actionlistener 放在构造函数之外
Java: I can't put my actionlistener outside the constructor
public Server(){
start.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
try{
port = Integer.parseInt(portInput.getText());
}
catch(NumberFormatException e){
text.append("");
}
}
});
}
在构造函数中有 actionlistener,我不能使用 append 方法,因为它告诉我添加一个服务器转换到 text.append("");
当我这样做时,它告诉我我 "Cannot cast from JTextArea to Server"
当我将动作侦听器移到构造函数之外时,它给我一个错误,基本上迫使我将动作侦听器放在构造函数中。所以我想要的是能够在构造函数之外拥有动作侦听器,这样我就可以在动作侦听器中调用 append
方法。
此时我不确定该怎么做。我敢肯定这是小事,但我就是想不通。有什么帮助吗?
你实际上并没有在
交出任何字符串
eventsLog.appendEventsLog("");
我不确定这是否与您的问题有关,或者您只是忘记输入了。
我将首先展示基于构造函数案例中的 addActionListener 的工作代码,我冒昧地介绍了缺少的字段。
public class ServerGUI {
private final JButton startServer = new JButton("Start server");
int port;
private JTextField portInput = new JTextField();
private JTextArea eventsLog = new JTextArea();
public ServerGUI(){
startServer.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
try{
port = Integer.parseInt(portInput.getText());
}
catch(NumberFormatException nfe){
appendEventsLog("");
}
}
});
}
private void appendEventsLog(String msg) {
String text = eventsLog.getText();
eventsLog.setText(text + "\n" + msg);
}
}
这里的问题是 appendEventsLog 不是 JTextArea 的成员,而是 ServerGUI 的成员。
对于第二种情况,在构造函数之外将 ActionListener 分配给 JButton,您必须使用静态代码块或我更喜欢的初始化方法
public class ServerGUI {
private final JButton startServer = new JButton("Start server");
int port;
private JTextField portInput = new JTextField();
private JTextArea eventsLog = new JTextArea();
public ServerGUI(){
initalise();
}
private void initalise() {
startServer.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
try{
port = Integer.parseInt(portInput.getText());
}
catch(NumberFormatException nfe){
appendEventsLog("");
}
}
});
}
private void appendEventsLog(String msg) {
String text = eventsLog.getText();
eventsLog.setText(text + "\n" + msg);
}
}
public Server(){
start.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
try{
port = Integer.parseInt(portInput.getText());
}
catch(NumberFormatException e){
text.append("");
}
}
});
}
在构造函数中有 actionlistener,我不能使用 append 方法,因为它告诉我添加一个服务器转换到 text.append("");
当我这样做时,它告诉我我 "Cannot cast from JTextArea to Server"
当我将动作侦听器移到构造函数之外时,它给我一个错误,基本上迫使我将动作侦听器放在构造函数中。所以我想要的是能够在构造函数之外拥有动作侦听器,这样我就可以在动作侦听器中调用 append
方法。
此时我不确定该怎么做。我敢肯定这是小事,但我就是想不通。有什么帮助吗?
你实际上并没有在
交出任何字符串eventsLog.appendEventsLog("");
我不确定这是否与您的问题有关,或者您只是忘记输入了。
我将首先展示基于构造函数案例中的 addActionListener 的工作代码,我冒昧地介绍了缺少的字段。
public class ServerGUI {
private final JButton startServer = new JButton("Start server");
int port;
private JTextField portInput = new JTextField();
private JTextArea eventsLog = new JTextArea();
public ServerGUI(){
startServer.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
try{
port = Integer.parseInt(portInput.getText());
}
catch(NumberFormatException nfe){
appendEventsLog("");
}
}
});
}
private void appendEventsLog(String msg) {
String text = eventsLog.getText();
eventsLog.setText(text + "\n" + msg);
}
}
这里的问题是 appendEventsLog 不是 JTextArea 的成员,而是 ServerGUI 的成员。
对于第二种情况,在构造函数之外将 ActionListener 分配给 JButton,您必须使用静态代码块或我更喜欢的初始化方法
public class ServerGUI {
private final JButton startServer = new JButton("Start server");
int port;
private JTextField portInput = new JTextField();
private JTextArea eventsLog = new JTextArea();
public ServerGUI(){
initalise();
}
private void initalise() {
startServer.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
try{
port = Integer.parseInt(portInput.getText());
}
catch(NumberFormatException nfe){
appendEventsLog("");
}
}
});
}
private void appendEventsLog(String msg) {
String text = eventsLog.getText();
eventsLog.setText(text + "\n" + msg);
}
}