2017-05-29 4 views
0

Ich habe eine Elternklasse und eine Kindklasse (beide JInternalFrame), mein Kind ist notwendig, wenn mein Elternteil offen ist. Ich suche und suche und nichts ... Nur vage Antworten. Wie kann ich ein Kind, das einen Elternteil schließt, entsorgen? (Ja, ich weiß, ich sage Kind statt Kinder aber Kind kann nur einmal öffnen, also ja, ist Kind) Ich versuchte mit Instanz, aber ich bin nicht so gut damit. Ein großes Dankeschön. =)Wie ein Kind von JInternalFrame Eltern entsorgen?

Link:https://pastebin.com/5MLUZDBZ

+0

Sie können einen 'InternalFrameListener' auf dem übergeordneten verwenden, hier sehen: https://docs.oracle.com/javase/tutorial/uiswing/ events/internalframelistener.html – Berger

+0

Danke aber wie bekomme ich den 'InternalFrame' zu ​​entsorgen? Ich habe versucht mit Instanz, aber wie ich schon sagte, ich bin nicht so gut mit dem – LuanDR

+0

Bitte schreiben Sie den Code, den Sie bisher haben. – Berger

Antwort

1

Für nächste Fragen, ist es empfehlenswert, dass Sie ein Minimal, Complete, and Verifiable example bieten.

jedoch in Ihrem Code suchen, müssen Sie nur machen es so, dass jeder Parent interne Rahmenspur seiner eigenen Child internen Rahmen hält (siehe List genannt children).

Wenn Sie den Elternteil entsorgen möchten, entsorgen Sie jedes Kind zuerst aus der Liste. Hier

ist die modifizierte Version Ihrer Parent Klasse:

import java.util.ArrayList; 
import java.util.List; 

import javax.swing.JDesktopPane; 

public class Parent extends javax.swing.JInternalFrame { 

    private final JDesktopPane pane; 
    private final List<Child> children = new ArrayList<>(); 

    public Parent(final JDesktopPane pane) { 
     this.pane = pane; 
     initComponents(); 
    } 

    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
    private void initComponents() { 

     jButton1 = new javax.swing.JButton(); 
     jButton2 = new javax.swing.JButton(); 

     jButton1.setText("Open child"); 
     jButton1.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(final java.awt.event.ActionEvent evt) { 
       jButton1ActionPerformed(evt); 
      } 
     }); 

     jButton2.setText("Close all"); 
     jButton2.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(final java.awt.event.ActionEvent evt) { 
       jButton2ActionPerformed(evt); 
      } 
     }); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
       layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
         .addGroup(layout.createSequentialGroup() 
           .addContainerGap() 
           .addComponent(jButton1) 
           .addGap(37, 37, 37) 
           .addComponent(jButton2) 
           .addContainerGap(193, Short.MAX_VALUE))); 
     layout.setVerticalGroup(
       layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
         .addGroup(layout.createSequentialGroup() 
           .addGap(30, 30, 30) 
           .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
             .addComponent(jButton1) 
             .addComponent(jButton2)) 
           .addContainerGap(225, Short.MAX_VALUE))); 

     pack(); 

    }// </editor-fold> 

    private void jButton1ActionPerformed(final java.awt.event.ActionEvent evt) { 
     Child c = new Child(); 
     children.add(c); 
     pane.add(c); 
     c.setVisible(true); 
     c.toFront(); 
    } 

    private void jButton2ActionPerformed(final java.awt.event.ActionEvent evt) { 

     //CLOSE THIS WINDOW AND CHILD 
     for (Child child : children) { 

      child.dispose(); 
     } 

     this.dispose(); 

    } 

    // Variables declaration - do not modify 
    private javax.swing.JButton jButton1; 
    private javax.swing.JButton jButton2; 
    // End of variables declaration 
} 
+0

Ich werde es testen, danke. Ich sehe jetzt, ob Kind keine Ausnahmeshow existiert, oder? Dann würde ich ein "if" verwenden, um zu überprüfen, ob "null" richtig ist? Ein großes Dankeschön !! Und ich werde "minimales, vollständiges und überprüfbares Beispiel" machen. – LuanDR

+0

Wenn kein Kind vorhanden ist, ist die 'children' Liste leer und die' for' Schleife macht nichts, Sie sollten keine Ausnahme bekommen. – Berger

+1

ohh ich vermisse das, omg danke – LuanDR