Frage

Wie kann ich kontrollieren, was mit Fenster passiert, nachdem JOptionPane Schaltflächen klicken? Ich versuche einfach Dateiauswahl zu implementieren. In meinem Rahmen habe ich 3 Tasten (OK, Abbrechen, Durchsuchen). Schaltfläche Durchsuchen öffnet Suchfenster-Datei und Dateien nach dem Pflücken an dem Hauptrahmen zurückkehren. OK klicken, wird ein Rahmen mit dem Inhalt der Datei öffnen. Jetzt porblem Blicke auf diese Weise. Mit dem folgenden Code, kann ich Datei wählen, aber direkt danach ein neuer Rahmen geschaffen wird, und mein Rahmen mit Knöpfen verschwindet:
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);   
    }
}

Mit dem zweiten Code kann ich auf mein Menü zurück, aber in keine Weise, die ich bin in der Lage, diesen neuen Rahmen Pop, der mit dem ersten Code erschien. Wie dies zu kontrollieren? Was bin ich?

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

}
War es hilfreich?

Lösung

Mit Ihrem Code. Versucht, es einfach zu machen:

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

Andere Tipps

könnten Sie haben Ihre Schaltfläche Durchsuchen Anzeige FileDialog , wie in diesem Beispiel gesehen.

Mit dem folgenden Code, kann ich Datei wählen aber unmittelbar danach ein neuer Rahmen ist mit Knöpfen erstellt, und mein Rahmen verschwindet:

Ja, denn sobald Sie auf eine Schaltfläche klicken auf der JOptionPane die Option Fenster geschlossen ist. Ich weiß nicht wirklich verstehen, was Sie versuchen zu tun, damit ich nicht einen Vorschlag machen kann.

im Allgemeinen jedoch die Gestaltung des Programms ist falsch. Sie sollen nicht zu schaffen und die Option Bereich in den Anzeigeverfahren, das die GUI erzeugt. Sobald dieser Code der Benutzer ausgeführt wird, wird nie in der Lage sein, eine andere Datei zu wählen, weil es keine Möglichkeit gibt, die Option Bereich erneut anzuzeigen.

Vielleicht müssen Sie Ihre JFrame mit einer Schaltfläche wie „Select File“ erstellen. Sie würden dann eine einfache Action auf diese Schaltfläche, dass zeigt die aktuelle Option Bereich hinzufügen. Das heißt, Sie sollten die Anzeige der Anwendung Dich mit einem permanenten JFrame starten. Dann nutzen Sie Menüs und Menüoptionen zur Auswahl einer Datei. Dies ist, wie die meisten Anwendungs ??Arbeit. Unter dem Menü „Datei“ haben Sie in der Regel einen „Öffnen“ Menüpunkt. Ein Klick auf das Öffnen würde bewirken, dass ein Dialog mit allen offenen Optionen Pop-up. Dann, wenn eine Datei ausgewählt ist, können Sie den Inhalt der Datei im Haupt JFrame angezeigt werden soll.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top