我写了这段代码:
public class FileViewer extends JPanel implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
JFileChooser chooser;
FileNameExtensionFilter filter = null;
JEditorPane pane = null;
JTextField text = null;
JButton button;
JTextArea o = null;
URL url;
public FileViewer(JTextArea o) {
this.o = o;
setLayout(new FlowLayout(FlowLayout.RIGHT));
JTextField text = new JTextField("file...", 31);
text.setColumns(45);
text.revalidate();
text.setEditable(true);
button = new JButton("Browse");
add(text);
add(button);
filter = new FileNameExtensionFilter("html", "html");
chooser = new JFileChooser();
chooser.addChoosableFileFilter(filter);
button.addActionListener(this);
}
public void paintComponent(Graphics g) {
super.paintComponents(g);
Graphics2D graphic = (Graphics2D) g;
graphic.drawString("HTML File:", 10, 20);
}
public void actionPerformed(ActionEvent event) {
int returnVal = 0;
if (event.getSource() == button) {
returnVal = chooser.showOpenDialog(FileViewer.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
text.setToolTipText(chooser.getSelectedFile().getName());
} else
o.append("Open command cancled by user.");
}
}
}
但是在行中:text.setToolTipText(chooser.getSelectedFile().getName());
抛出了NullPointerException!
修改 我已经解决了上面提到的问题,但它无法正常工作(它没有在文本中写出文件的名称!): - (
答案 0 :(得分:13)
您已全局声明text
并为其指定了NULL
。在FileViewer
的构造函数中,您使用new
再次声明它,但此声明是本地的。 actionPerformed()
中引用的变量是全局变量,仍为NULL
,因此您获得异常。如果你改变了
JTextField text = new JTextField("file...", 31);
到
text = new JTextField("file...", 31);
应该修复它。
答案 1 :(得分:4)
回答你的另一点:
text.setToolTipText(chooser.getSelectedFile().getName());
这是预期的行为吗?将鼠标悬停在文本字段上时,文件名仅显示为工具提示。要将文本直接放入JTextField,您应该调用setText()
。
答案 2 :(得分:2)
替换这个:
JTextField text = new JTextField("file...", 31);
用这个:
text = new JTextField("file...", 31);
答案 3 :(得分:2)
字段文本为null,就像在FileViewer构造函数中一样,您创建了一个名为text的局部变量,该变量已添加到表单中。
替换
JTextField text = new JTextField("file...", 31);
与
text = new JTextField("file...", 31);
答案 4 :(得分:1)
setToolTipText
方法未设置文本。它设置工具提示文本,当鼠标悬停文本时显示该文本。使用setText
方法。