我写了这段代码:

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!

编辑我已经解决了上面提到的问题,但它无法正常工作(它没有在文本中写入文件名!):-(

有帮助吗?

解决方案

应答的其他点:

text.setToolTipText(chooser.getSelectedFile().getName());

这是预期的行为?文件名只会出现一个提示,当你鼠标移到文本字段。把文字直接进入你应该叫setText(),而不是一个JTextField。

其他提示

您已经声明text全球和分配NULL它。在您的构造函数FileViewernew再次声明,但该声明是局部的。在actionPerformed()引用的变量是全局的,这仍然是NULL,所以你得到的异常。如果更改

JTextField text = new JTextField("file...", 31);

text = new JTextField("file...", 31);

这应该修复它。

替换这样的:

JTextField text = new JTextField("file...", 31);

与此:

text = new JTextField("file...", 31);

字段文本为 null,因为您在 FileViewer 构造函数中创建了一个名为 text 的局部变量,该变量已添加到表单中。

代替

JTextField text = new JTextField("file...", 31);

text = new JTextField("file...", 31);

setToolTipText方法不设置文本。它设置工具提示文本,当鼠标悬停在文本其被示出。使用setText方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top