GUI: Panel in Panel laden

DaAni

Mitglied
Hallo Zusammen,
ich habe folgendes Problem.
Ich habe eine Klasse (JPanel Form) mit Buttons etc erstellt.
Diese will ich nun in einer anderen (Haupt)Klasse in ein vorhandenes Panel per Klick auf einen Button laden.
Ich habe schon folgendes Probiert

Java:
test muster=new test(); //JPanel form - extern

jPanel1.removeAll();
jPanel1.add(muster);
jPanel1.revalidate();
jPanel1.repaint();

Jedoch geschieht nichts wenn ich auf den Button klicke?
An was kann das liegen? am Layaut der Klasse?
Ich bin wirklich Ratlos und google brachte mich leider auch nicht zum Erfolg 🙁

Vielen Dank für die Hilfe
 
Mit dem Code snippet kann man leider kaum etwas sagen.
Mal debugged, geschaut ob deine Actions richtig laufen, ob alles richtig gezeichnet wird?
 
Und ob das "jPanel1" wirklich das ist, was sichtbar ist? (Ein beliebter Fehler ist es, an falschen Stellen neue JPanels zu erstellen, die aber nirgendwo hinzugefügt werden...)
 
Was für eienn layoutManager verwendest du denn da?
Ohne jetzt viel vom Code zu sehen, wäre das meine Vermutung für die Fehlerquelle.
 
Du kannst auch mal muster.setBackground(Color.blue); machen. Falls dann etwas mit deinem test-Panel nicht stimmt, weißt du zumindest, dass es da ist und auch angezeigt wird 🙂
 
Bei dem panel1 und test() verwende ich grouplayout.
Das mit der Hintergrundfarbe hab ich gemacht und klappt auch - also die Actionlistener funktionieren soweit
 
hier mal der code von test():

Java:
package kgui;

/**
 *
 * @author Ani
 */
public class test extends javax.swing.JPanel {

    /** Creates new form test */
    
    public test() {
        initComponents();
        this.setVisible(true);
    }
   
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jSlider1 = new javax.swing.JSlider();
        jLabel1 = new javax.swing.JLabel();

        jSlider1.setName("jSlider1"); // NOI18N

        setName("Form"); // NOI18N

        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(kgui.KguiApp.class).getContext().getResourceMap(test.class);
        jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N
        jLabel1.setName("jLabel1"); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(50, 50, 50)
                .addComponent(jLabel1))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(30, 30, 30)
                .addComponent(jLabel1))
        );
    }// </editor-fold>
    // Variables declaration - do not modify
    private javax.swing.JLabel jLabel1;
    private javax.swing.JSlider jSlider1;
    // End of variables declaration
}
 
So nun kannst du sehen, dass das test-Panel von dir hinzugefügt wird, sofern ich dich richtig verstanden habe.
Was genau ist denn nun das Problem? Wird auf dem test-Panel nichts angezeigt?
 
Was genau ist denn nun das Problem? Wird auf dem test-Panel nichts angezeigt?
->Richtig - was kann man dagegen tun?

ist die test()-klasse soweit richtig?
 
Habs bei mir mal getestet.
Also: Java lässt es nicht zu, wenn man versucht mehrmals die selbe Component auf eine andere Component zu packen. Deswegen wird dein JLabel auch nur einmal angezeigt.
Ich hatte die Zeile:
Java:
org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(kgui.KguiApp.class).getContext().getResourceMap(test.class);
Bei mir weggenommen und das Label manuell benannt, das wurde auch erfolgreich angezeigt. Wenn du dein label nicht siehst, ist vermutlich der String "".
 

Zurück
Oben