1

私はこのコードを書きました:

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がスローされます!

編集 私は上記の問題を修正しましたが、正しく機能しません(テキストにファイルの名前が書き込まれません!):-(

4

5 に答える 5

13

グローバルに宣言し、それtextに割り当てNULLました。コンストラクターで、FileViewerを使用して再度宣言しますnewが、この宣言はローカルです。で参照されている変数actionPerformed()はグローバル変数であり、まだNULLであるため、例外が発生します。変更した場合

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

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

それはそれを修正する必要があります。

于 2009-08-06T14:25:39.287 に答える
4

あなたの他のポイントに答える:

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

これは意図された動作でしたか?ファイル名は、テキストフィールドの上にマウスを置いたときにのみツールチップとして表示されます。テキストをJTextFieldに直接配置するには、setText()代わりに呼び出す必要があります。

于 2009-08-06T14:37:42.827 に答える
2

これを置き換えます:

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

これとともに:

text = new JTextField("file...", 31);
于 2009-08-06T14:26:08.570 に答える
2

フォームに追加されたtextというローカル変数を作成したFileViewerコンストラクターのように、フィールドテキストはnullです。

交換

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

text = new JTextField("file...", 31);
于 2009-08-06T14:26:44.637 に答える
1

setToolTipTextメソッドはテキストを設定しません。これは、マウスがテキストにカーソルを合わせたときに表示されるツールチップテキストを設定します。setTextメソッドを使用します。

于 2009-08-06T14:40:23.040 に答える