Вопрос

Я написал этот код:

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());

Было ли это запланированным поведением?Имя файла появится в виде всплывающей подсказки только при наведении курсора мыши на текстовое поле.Чтобы поместить текст непосредственно в JTextField, вам следует вызвать setText() вместо.

Другие советы

Вы заявили text глобально и назначено NULL к этому.В вашем конструкторе для FileViewer вы заявляете об этом снова с помощью new, но это объявление является локальным.Переменная, на которую ссылается actionPerformed() является глобальным, который до сих пор NULL, поэтому вы получаете исключение.Если вы измените

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

к

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

это должно исправить это.

замените это:

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

с этим:

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

Текст поля равен нулю, так как в вашем конструкторе FileViewer вы создали локальную переменную с именем text, которая была добавлена в форму.

Заменить

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

с

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

setToolTipText метод не устанавливает текст.Он устанавливает текст всплывающей подсказки, который отображается при наведении курсора мыши на текст.Использовать setText метод.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top