Domanda

Ho scritto questo codice:

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.");
      }
     }
}

Ma in line: text.setToolTipText(chooser.getSelectedFile().getName()); un NullPointerException è gettato

Modifica Ho risolto il problema che ho accennato in precedenza, ma non funziona correttamente (non scrivere il nome del file nel testo!): - (

È stato utile?

Soluzione

Risposta vostro altro punto:

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

Questa il comportamento previsto? Il nome del file apparirà solo come suggerimento quando il mouse sopra il campo di testo. Per mettere il testo direttamente in un JTextField si dovrebbe chiamare setText() invece.

Altri suggerimenti

Hai dichiarato text a livello globale ed essere associato NULL ad esso. Nel costruttore per FileViewer si dichiara ancora una volta con new, ma questa dichiarazione è locale. La variabile si fa riferimento in actionPerformed() è quello globale, che è ancora NULL, in modo da ottenere l'eccezione. Se si cambia

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

a

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

che dovrebbe risolvere il problema.

sostituire questo:

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

con questo:

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

Il testo campo è nullo come nel costruttore FileViewer è stata creata una chiamata di testo variabile locale che è stato aggiunto al form.

Sostituire

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

con

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

metodo setToolTipText non imposta il testo. Si imposta il testo della descrizione comandi, che viene visualizzata quando si posiziona il mouse il testo. Utilizzare il metodo setText.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top