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("");
当我这样做时,它告诉我我不能从JTextArea投射到服务器"
当我将动作侦听器移到构造函数之外时,它会给我一个错误,并且基本上迫使我将动作侦听器放在构造函数中。所以我想要的是能够在构造函数外部拥有动作侦听器,这样我就可以在actionlistener中调用append
方法。
此时我不知道该怎么做。我确定它的东西很小,但我无法弄明白。有什么帮助吗?
答案 0 :(得分:2)
我将首先在构造函数的情况下提供基于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);
}
}
答案 1 :(得分:0)
你实际上没有在
交出任何字符串eventsLog.appendEventsLog( “”);
如果它与您的问题有关,或者您只是忘了键入它,我不会感到害羞。