Что не так с этим кодом?[закрыто]
-
11-09-2019 - |
Вопрос
Я написал этот код:
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
метод.