Interface 2 von einander unabhängige Frames mit Panel gleichzeitig nutzen

CptK

Bekanntes Mitglied
Hallo, ich würde gerne 2 JFrames mit je einem JPanel gleichzeitig nutzen. Geht so etwas, weil momentan habe ich das Problem, dass nach repaint() beide das gleiche zeigen.
 
Kannst Du da bitte ausführen, was Du genau machst?

Eine JPanel Instanz in zwei JFrames anzeigen halte ich für Problematisch, denn es sollte eigentlich eine Baumstruktur vorhanden sein. Also eine Instanz von JPanel in zwei JFrames gleichzeitig einzufügen ist so nicht unterstützt. (Alle Swing Komponenten erben von Component und da ist ein Parent definiert. Daher hat ein Element genau ein Parent!)

Aber evtl. verstehe ich auch einfach nur nicht korrekt, was Du genau machst. Zeig einfach mal etwas Code.
 
Ja du hast mich etwas falsch verstanden, ich möchte gerne zwei Frames, die jeweils ein eigenes Panel haben. Mein Problem ist jetzt aber, dass beide Panels das gleiche anzeigen, obwohl sie unterschiedliches anzeicgen sollten.
 
Kannst du da einmal Deinen Code zeigen? So ohne genaue Details ist da erst einmal nichts zu sagen.
 
Ich weiß leider nicht an welchen Klassen das liegt deshalb hänge ich mal das Projekt mal an. Package Gui und Algorithm müsste es sein.
 

Anhänge

Ok, ich habe mir das jetzt einmal angesehen und wenn ich main.MergeSort starte, dann bekomme ich nur ein Fenster. Da Du aber von 2 Fenstern sprichst, wird es um main.Main gehen.

Da öffnen sich bei mir zwei Fenster, eins mit Balken und eins, das eine Textausgabe zeigt. Nur was genau ist jetzt das Problem? Das habe ich auf Anhieb jetzt nicht gesehen.

Was ich noch gemacht habe: Ich habe in den beiden Frames ein setTitle aufgerufen, damit ich einfacher sehen konnte, welches Fenster durch was dargestellt wird.
Dann habe ich im TreePanel in paintComponent das fillRect rausgenommen - denn dieses Kästchen machte ja erst einmal keinen Sinn, oder?

Was direkt auffällt ist, dass die Klassen extrem viele Abhängigkeiten zueinander haben. So kennt Dein algorithm die GUI Klassen. Das ist natürlich nicht ganz so gut. Aber das ist dann eine Design Frage. Da können wir später einmal drüber reden, wenn Du mir das eigentliche Problem einmal erläutert hast:
- Was ist die Ausgabe, die Du bekommst und was würdest Du erwarten?
 
Ich habe es aber mit einem JDK 11 ausgeführt und nicht mit einem 8er. Aber würde mich wundern, wenn das einen massiven Unterschied machen würde. Zeig einfach einmal, wie es bei Dir aussieht.
 
Zeigt bei mir auch zwei Fenster mit verschiedenen Inhalten an - ich hab noch nicht mal neu kompiliert, sondern einfach Deine .class-Files verwendet. Dafür erhalte ich ein kleines schwarzes Rechteck im Textausgabefenster 😱

12760
 
Zeigt bei mir auch zwei Fenster mit verschiedenen Inhalten an - ich hab noch nicht mal neu kompiliert, sondern einfach Deine .class-Files verwendet. Dafür erhalte ich ein kleines schwarzes Rechteck im Textausgabefenster 😱

Das Kästchen hatte ich auch - das war eine Anpassung von mir (War ein fillRect Aufruf im paintComponent). Und ich habe die Fenster mit Titeln versehen damit ich da nichts durcheinander werfe - das war einfach vorab ehe ich nach Auffälligkeiten geschaut habe....

Meine Idee wäre gewesen, dass da evtl. etwas nicht übersetzt worden ist. Aber wenn @mihe7 die .class Files verwendet hat, dann scheidet das eigentlich aus.

Du startest aus Eclipse heraus oder wie startest Du dein Programm?
 
Das Kästchen hatte ich auch - das war eine Anpassung von mir (War ein fillRect Aufruf im paintComponent). Und ich habe die Fenster mit Titeln versehen damit ich da nichts durcheinander werfe - das war einfach vorab ehe ich nach Auffälligkeiten geschaut habe....

Meine Idee wäre gewesen, dass da evtl. etwas nicht übersetzt worden ist. Aber wenn @mihe7 die .class Files verwendet hat, dann scheidet das eigentlich aus.

Du startest aus Eclipse heraus oder wie startest Du dein Programm?
Jap Eclipse Photon falls das einen Unterschied macht
 
Naja, Du erzeugst in einem Panel einen Frame, die Frames werden im Konstruktor sichtbar gemacht, das ganze passiert auch noch außerhalb des EDT. Du kannst spaßeshalber mal ausprobieren, ob es was bringt, wenn Du Main so umschreibst:
Java:
public class Main {

        public static void main(String[]args) {
                SwingUtilities.invokeLater(() -> new gui.Frame());
        }

}
 
Naja, Du erzeugst in einem Panel einen Frame, die Frames werden im Konstruktor sichtbar gemacht, das ganze passiert auch noch außerhalb des EDT. Du kannst spaßeshalber mal ausprobieren, ob es was bringt, wenn Du Main so umschreibst:
Java:
public class Main {

        public static void main(String[]args) {
                SwingUtilities.invokeLater(() -> new gui.Frame());
        }

}
Hat leider nichts gebracht :/
 
Was passiert denn, wenn Du
Code:
java -Dsun.noddraw=true -cp . main.Main
im bin-Verzeichnis startest?
 
Und du bist Dir sicher, dass Du das mit den Klassen aus dem Zip probierst? Ohne den Spaß vorher in einer IDE zu öffnen? Wenn ja, was spuckt denn java -version aus?
 
Und du bist Dir sicher, dass Du das mit den Klassen aus dem Zip probierst? Ohne den Spaß vorher in einer IDE zu öffnen? Wenn ja, was spuckt denn java -version aus?
wie navigiere ich denn in den Zip folder um das aufzurufen?

Code:
C:\Users\User>java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
 
Ein virtueller Keks genügt mir völlig 🙂
Gib mir einen Moment ... ich baue eben schnell eine Seite, die Dir einen virtuellen Keks gibt. Muss Dein Browser dann nur annehmen 🙂

Gibt es Wünsche, was im Cookie stehen soll? Sonst wird es ein einfaches "message=Wünsche ein frohes Weihnachtsfest und einen guten Rutsch ins neue Jahr!".
 
Leute ich finde eure Diskussion hier ja sehr amüsant, aber ich würde mich wirklich sehr freuen, wenn mir wer mit meinem Problem helfen könnte.
 
Java:
public class Test {
    public void createAndShowGUI() {
        newFrame("Frame 1", "Test 1");
        newFrame("Frame 2", "Test 2");
    }
    private void newFrame(String title, String content) {
        JFrame frame = new JFrame(title);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(new JLabel(content));
        frame.setSize(300, 200);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().createAndShowGUI());
    }
}
Liefert das bei Dir zwei unterschiedliche Fenster?
 

Zurück
Oben