Podmiana paneli w JFrame

0

Witam,
Na początek zaznaczę, że dopiero zaczynam swoją przygodę z Javą.
W Netbeans graficznie utworzyłem sobie JFrame, dodałem do niego panel (panel1) i utworzyłem nowy JPanel Form(panel2) z New File. W na panelu w JFrame ustawiam sobie kontrolki, etykiety, guziki itp. Na panelu stworzonym poprzez New file tworze sobie tabelki itp. Moje pytanie. Jak podmienić panel1 na panel2, żeby panel2 "wyparł" panel1 z JFrame ?
W poniższym linku na końcu nagrania jest podobne pytanie
http://www.youtube.com/watch?v=0kk9vnBALw4&feature=related

0
    remove(oldPanel);
    add(newPanel);
    validate();
    repaint();
0

Udało mi się usunąć istniejący panel ale jeszcze mam problem z dodaniem nowego.
Mam 3 pliki:
Main.java

package test_paneli;

public class Main {

    public static void main(String[] args) {
        // TODO code application logic here
        Ramka obiekt_ramkowy = new Ramka();
        obiekt_ramkowy.setVisible(true);
    }
}

Ramka.java

package test_paneli;

public class Ramka extends javax.swing.JFrame {

    /** Creates new form Ramka */
    public Ramka() {
        initComponents();
    }

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

        Stary_panel = new javax.swing.JPanel();
        jSlider1 = new javax.swing.JSlider();
        podmianka = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        javax.swing.GroupLayout Stary_panelLayout = new javax.swing.GroupLayout(Stary_panel);
        Stary_panel.setLayout(Stary_panelLayout);
        Stary_panelLayout.setHorizontalGroup(
            Stary_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(Stary_panelLayout.createSequentialGroup()
                .addGap(88, 88, 88)
                .addComponent(jSlider1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(92, Short.MAX_VALUE))
        );
        Stary_panelLayout.setVerticalGroup(
            Stary_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(Stary_panelLayout.createSequentialGroup()
                .addGap(56, 56, 56)
                .addComponent(jSlider1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(117, Short.MAX_VALUE))
        );

        podmianka.setText("Podmien");
        podmianka.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                podmiankaActionPerformed(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()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(Stary_panel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(podmianka, javax.swing.GroupLayout.Alignment.TRAILING))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(Stary_panel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(29, 29, 29)
                .addComponent(podmianka)
                .addContainerGap(39, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    private void podmiankaActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
     remove(this.Stary_panel);
        Panel_do_podmiany panelkowy = new Panel_do_podmiany(); 
        add(panelkowy);
        validate();
        repaint();
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Ramka().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JPanel Stary_panel;
    private javax.swing.JSlider jSlider1;
    private javax.swing.JButton podmianka;
    // End of variables declaration

}

oraz Panel_do_podmiany.java

package test_paneli;

public class Panel_do_podmiany extends javax.swing.JPanel {

    /** Creates new form Panel_do_podmiany */
    public Panel_do_podmiany() {
        initComponents();
    }

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

        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(38, Short.MAX_VALUE)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 257, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(29, 29, 29))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 194, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
    }// </editor-fold>


    // Variables declaration - do not modify
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    // End of variables declaration

}

To dopisałem sam, więc tu pewnie jest błąd. Całą resztę wyklikałem.
private void podmiankaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
remove(this.Stary_panel);
Panel_do_podmiany panelkowy = new Panel_do_podmiany();
add(panelkowy);
validate();
repaint();
}

0

Dla mnie taki wyklikany kod jest całkowicie nieczytelny. Prawdopodobnie musisz

add(newPanel);
//na coś w rodzaju
addComponent(newPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
0

Ja do tej pory używałem dla danego panelu metody setVisible(), działało, ale dla dużej ilości paneli robi się to uciążliwe.

0

Czyli ogólnie nie polecacie graficznego tworzenia w NetBeans ?

0

Ja osobiście używam netbeansa i jestem zadowolony, chociaż też męcze się z tymi Panelami, ale to raczej z powodu niewystarczającego doświadczenia w programowaniu niż z powodu netbeansa.

0

A jak podmieniasz te panele w Netbeans ? Kod bo niestety nie zadzialal :(

0

Jak mam np 2 panele to na początku programu ustawiam panel1.setVisible(true), a panel2.setVisible(false).
Później jak np. po użyciu jakiegoś buttona, chce żeby wyświetlił mi się panel2 to robię panel1.setVisible(false); a panel2.setVisible(true); i jeszcze repain() i już jest ok

0

A to robisz panele w jednej klasie czy podłączasz panel z zewnętrznej klasy ?

0

ja robie w osobnej klasie bo kod jest czytelniejszy i łatwiej się ogarnąć

0

A mógłbyś podać jakiś przykładowy kod jak podmieniasz jpanel z osobnej klasy :)

Dobra zrobiłem po swojemu. W głównym oknie JFrame utworzyłem netbeans-em dwa panele, lewy i prawy.
W prawym ustawiłem Layout Border. I teraz wrzucam do niego panel z zewnetrznego pliku

        Prawy_Panel.add(panel_zmiana);
        Prawy_Panel.validate();
        Prawy_Panel.repaint();

panel_zmiana jest to panel utworzony w netbeans-ie w osobnym pliku, rozmiarami dopasowałem do wymiarów Prawy_Panel i podmienia :)
Zapewne można zrobić to wrzucajac bezposrednio panel_zmiana w JFrame ale dopiero zaczynam swoja przygodę z Java i do amatorskich zastosowań starcza :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1