我正在尝试使用实现框架来创建NewCard类。如何将Actionlisteners添加到NewCard类的构造函数中的元素?我不能把Actionlistener放到构造函数中,当我把它放在外面时,元素“field”对于saveButtonListener块是不可见的。
第二个问题:try块中的类记录抛出两个异常,为什么尝试块生成错误?
package Interface;
import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import Engine.*;
class NewCard extends JFrame
{
NewCard()
{
JFrame Card = new JFrame();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setTitle("New Card");
setSize(340, 580);
setVisible(true);
Container contentPane = getContentPane();
contentPane.setLayout(null);
// Field
JTextField field = new JTextField();
contentPane.add(field);
field.setBounds(110,15,200,25);
// Button:
JButton saveButton = new JButton("Save");
powZawartosci.add(saveButton);
saveButton.setBounds(95,495,150,25);
saveButtonListener listener1 = new saveButtonListener();
saveButton.addActionListener(listener1);
}
private class saveButtonListener implements ActionListener
{
try
{
@Override
public void actionPerformed(ActionEvent event)
{
new Record(field.getText());
}
}
catch(IOException e)
{
System.out.println("IOException");
}
catch(SQLException e)
{
System.out.println("SQLException");
}
finally
{
}
}
}
答案 0 :(得分:2)
关于:
我无法将Actionlistener放入构造函数中,...
谁说你不能?只需添加ActionListener ...
JButton saveButton = new JButton("Save");
saveButton.addActionListener(new SaveButtonListener()); // capitalize class names
或者您可以使用匿名内部类,甚至更好地使用AbstractActions。
编辑1:
关于:
第二个问题:try块中的类记录抛出两个异常,为什么尝试阻塞生成错误?
如果您对异常有疑问, 显示 异常会很有意义。
编辑2
关于:
class NewCard extends JFrame
{
NewCard()
{
JFrame Card = new JFrame();
为什么该类扩展JFrame并在从未使用的类中创建JFrame?最好不要让类扩展JFrame,而是在需要时创建JFrame。
答案 1 :(得分:2)
您可以将动作侦听器放在构造函数中,如下所示:
final JTextField field = new JTextField();
...
saveButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
new Record(field.getText());
}
});
答案 2 :(得分:2)
通过为侦听器创建适当的构造函数,将field
传递给saveButtonListener
。
或者使用匿名听众,如Mersenne的回答所示。