Domanda

Come posso controllare ciò che accade con finestra dopo aver fatto clic pulsanti JOptionPane? Sto cercando di implementare semplice selettore di file. Nel mio telaio Ho 3 pulsanti (OK, Annulla, Sfoglia). pulsante Sfoglia finestra di ricerca file si apre, e dopo aver raccolto i file dovrebbero tornare al telaio principale. Facendo clic su OK si aprirà una cornice con il contenuto del file. Ora porblem sguardi in questo modo. Con il codice qui sotto, posso scegliere di file, ma subito dopo che viene creato un nuovo telaio, e il mio telaio con bottoni scompare:
alt text http://img20.imageshack.us/img20/7614/windowh.png
alt text http://img267.imageshack.us/img267/1953/emptywindow.png

import java.io.File;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.awt.*;
import javax.swing.*;
import java.io.*;   

public class Main {

    public static void main(String args[]) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                show("Window");
            }
        });
    }

    public static void show(String frame_name){
        JFrame frame = new JFrame(frame_name);
        frame.setPreferredSize(new Dimension(450, 300));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel top = new JPanel();
        top.setLayout(new BoxLayout(top, BoxLayout.Y_AXIS));

        JFileChooser fc = new JFileChooser(new File("."));

        JPanel creator = new JPanel();
        creator.setLayout(new BoxLayout(creator, BoxLayout.Y_AXIS));
        creator.add(top);

        String[] buttons = {"OK", "Cancel", "Browse"};

        int rc = JOptionPane.showOptionDialog(
                   null,
                   creator,
                   frame_name,
                   JOptionPane.DEFAULT_OPTION,
                   JOptionPane.PLAIN_MESSAGE,
                   null,
                   buttons,
                   buttons[0]
                 );

        String approveButt = "";

        switch(rc){
            case 0:
                break;
            case 1:
                break;
            case 2:
        approveButt = buttons[rc];
        int retVal = fc.showDialog(null, approveButt);
        if (retVal == JFileChooser.APPROVE_OPTION)
          System.out.println(approveButt + " " + fc.getSelectedFile());
                break;
        }   
        frame.pack();
    frame.setVisible(true);   
    }
}

Con il secondo codice posso tornare al mio menu, ma in nessun modo io sono in grado di pop questo nuovo telaio, che è apparso con il primo codice. Come controllare questo? Che cosa mi manca?

public class Main {

    public static void main(String args[]) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                show("Window");
            }
        });
    }

    public static void show(String frame_name){
        JFrame frame = new JFrame(frame_name);
        frame.setPreferredSize(new Dimension(450, 300));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel top = new JPanel();
        top.setLayout(new BoxLayout(top, BoxLayout.Y_AXIS));
        JFileChooser fc = new JFileChooser(new File("."));
        JPanel creator = new JPanel();
        creator.setLayout(new BoxLayout(creator, BoxLayout.Y_AXIS));
        creator.add(top);

        String[] buttons = {"OK", "Cancel", "Browse"};
        String approveButt = "";

        Plane m = null;

        int rc = -1;
        while (rc != 0) {
          rc = JOptionPane.showOptionDialog(
                       null,
                       creator,
                       frame_name,
                       JOptionPane.DEFAULT_OPTION,
                       JOptionPane.PLAIN_MESSAGE,
                       null,
                       buttons,
                       buttons[0]
                     );

        switch (rc) {
        case 0:
            m = new Plane();
        case 1:
            System.exit(0);
        case 2:
            approveButt = buttons[rc];
            int retVal = fc.showDialog(null, approveButt);
            if (retVal == JFileChooser.APPROVE_OPTION)
                System.out.println(approveButt + " " + fc.getSelectedFile());
            break;
        default:
            break;
        }
        }    
                addComponents(frame.getContentPane(), m);

        frame.pack();
        frame.setVisible(true);
    }

    private static void addComponents(Container c, Plane e) {
        c.setLayout(new BoxLayout(c, BoxLayout.Y_AXIS));
        c.add(e);
    }
}

class Plane extends JPanel {

    public Plane(){
    }

    @Override
    public void paint(Graphics g){
        g.setColor(Color.BLUE);
        g.fillRect(0, 0, 400, 250);
    }

}
È stato utile?

Soluzione

Utilizzando il codice. Ho cercato di rendere più semplice:

import java.awt.*;
import javax.swing.*;
import java.io.*;


public class Main {

    public static void main(String args[]) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                show("Window");
            }
        });
    }

    public static void show(String frame_name){
        JFrame frame = new JFrame(frame_name);
        frame.setPreferredSize(new Dimension(450, 300));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel top = new JPanel();
        top.setLayout(new BoxLayout(top, BoxLayout.Y_AXIS));

        JPanel creator = new JPanel();
        creator.setLayout(new BoxLayout(creator, BoxLayout.Y_AXIS));
        creator.add(top);

        JFileChooser fc = new JFileChooser(new File("."));

        String[] buttons = {"OK", "Cancel", "Browse"};

        int rc=-1;

        do {
            rc = JOptionPane.showOptionDialog(
                       null,
                       creator,
                       frame_name,
                       JOptionPane.DEFAULT_OPTION,
                       JOptionPane.PLAIN_MESSAGE,
                       null,
                       buttons,
                       buttons[0]
                     );

            if( rc == 1){
                System.exit(0);
                break;
            }
            else if(rc == 2){
                int retVal = fc.showDialog(null, "Test");
                if (retVal == JFileChooser.APPROVE_OPTION)
                    System.out.println("File choose" + fc.getSelectedFile());
            }
        } while (rc != 0);

        if( rc == 0){
                frame.setVisible(true);
                frame.pack();
        }
    }
}

Altri suggerimenti

Si potrebbe avere il display pulsante Sfoglia FileDialog , come si vede in questo esempio .

  

Con il codice qui sotto, posso scegliere il file   ma subito dopo che un nuovo telaio è   creato, e il mio telaio con bottoni   scompare:

Sì perché non appena si fa clic su un pulsante sul JOptionPane riquadro opzione è chiusa. Io non capisco che cosa si sta cercando di fare, quindi non posso dare un suggerimento.

Tuttavia, in generale, la progettazione del vostro programma è sbagliato. Non si dovrebbe essere la creazione e la visualizzazione del riquadro opzione nel metodo che crea l'interfaccia grafica. Una volta che questo codice viene eseguito l'utente non sarà mai in grado di selezionare un altro file perché non v'è alcun modo per visualizzare nuovamente il riquadro opzione.

Così forse si deve creare il vostro JFrame con un pulsante mi piace "Select File". Si potrebbe quindi aggiungere un semplice ActionListener a questo pulsante che visualizza il riquadro opzione corrente. Cioè si dovrebbe iniziare la visualizzazione di voi un'applicazione con un JFrame permanente. Quindi si utilizza i menu e le voci di menu per selezionare un file. Questo è il modo più lavoro di applicazione. Sotto il menu "File" è in genere sono una voce di menu "Apri". Cliccando sul Aprire causerebbe una finestra per far apparire con tutte le opzioni aperte. Poi, quando si seleziona un file, si visualizza il contenuto del file nel JFrame principale.

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