IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Neaktivní uživatel:10.2.2015 16:03

Ach jo, nerad zase otravuju ale nevím jak přepínat mezi panely.Mám 2 odlišné panely které dělají odlišné věci ale nevím jak mezi nimi přepínat na klik JButton.Prosím poraďte co nejdřív.

Odpovědět
10.2.2015 16:03
Neaktivní uživatelský účet
Avatar
Rasto
Tvůrce
Avatar
Rasto:11.2.2015 10:17
public void actionPerformed(ActionEvent ae){
   panel1.setVisible(false);
   panel2.setVisible(true);
}

setVisible() je metoda na tento ucel, ale tazko radit, ked nevieme presne, co a ako by si potreboval....

 
Nahoru Odpovědět
11.2.2015 10:17
Avatar
Odpovídá na Rasto
Neaktivní uživatel:11.2.2015 16:53

Potřeboval bych to tak že...Mám 2 nadesignované panely (Panel1.java a Panel2.java)a potom mám třídu (JFrame) main.V ní (main) mám 1 prázdný panel ve kterém bych chtěl vyměňovat Panel1.java a Panel2.java. na jradiobutton1 chci Panel1.java a na jradiobutton2 chci Panel2.java .

Doufám že jsem to napsal srozumitelně a pochopitelně.Raději ještě posílám obrázek jak to mám :)

Nahoru Odpovědět
11.2.2015 16:53
Neaktivní uživatelský účet
Avatar
Silvinios
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Silvinios:11.2.2015 18:45

Myslím, že hledáš CardLayout.

 
Nahoru Odpovědět
11.2.2015 18:45
Avatar
Rasto
Tvůrce
Avatar
Rasto:11.2.2015 18:58

Myslim, ze problem moze naozaj byt v pouzitych Layout manageroch.
JFrame ma defaultne BorderLayout, JPanel Flowlayout.
Ak teda do prazdneho JPanelu, kde si ponechal defaultny FlowLayout vlozis 2 dalsie panely, ulozia sa ti akoby vedla seba a este k tomu s nejakou systemom urcenou velkostou.
CardLayout je urcite vhodny na to co potrebujes.
Alebo uplne zrus defaultny flowlayout (setLayout(null)) a manazuj vizibilitu a umiestnenie panelov manualne.
Prikladam uryvok kodu.

public class PanelTest {
    JFrame okno;
    JPanel hlavnyPanel;
    Panel1 p1;
    Panel2 p2;
    JRadioButton b1;
    JRadioButton b2;
    ButtonGroup bg;

    public PanelTest(){
        okno = new JFrame("Panel Test");
        okno.setSize(400,500);
        okno.setLocationRelativeTo(null);
        okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //okno.setLayout(null);

        p1 = new Panel1();
        p2 = new Panel2();

        b1 = new JRadioButton("Panel 1");
        b1.setBounds(100,420,70,30);
        b1.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent ae){
                p1.setVisible(true);
                p2.setVisible(false);
            }
        });

        b2 = new JRadioButton("Panel 2");
        b2.setBounds(200,420,70,30);
        b2.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent ae){
                p2.setVisible(true);
                p1.setVisible(false);
            }
        });

        bg = new ButtonGroup();
        bg.add(b1);
        bg.add(b2);
        nastavHlavnyPanel();

        okno.add(hlavnyPanel);

        okno.setVisible(true);
    }

    private void nastavHlavnyPanel(){
        hlavnyPanel = new JPanel();
        hlavnyPanel.setLayout(null);

        hlavnyPanel.add(p1);
        hlavnyPanel.add(p2);
        hlavnyPanel.add(b1);
        hlavnyPanel.add(b2);

    }

Triedy Panel1 a Panel2 "extenduju" JPanel a mam v nich nastavene cez setBounds() velkost a umiestnenie. POslem ti aj cely "program" ak chces :-)

 
Nahoru Odpovědět
11.2.2015 18:58
Avatar
Neaktivní uživatel:12.2.2015 7:27

A šlo by to nějak tak?:

public void actionmPerfomed(ActionEvent ae){
hlavnyPanel.removeAll();
hlavnyPanel.add(p1);
hlavnyPanel.revalidate();
hlavnyPanel.repaint();
}
Nahoru Odpovědět
12.2.2015 7:27
Neaktivní uživatelský účet
Avatar
D0ll0k
Člen
Avatar
Odpovídá na Neaktivní uživatel
D0ll0k:12.2.2015 17:42

Nejsem v tom nějaký odborník, ale pokud jsem to správně pochopil, máš hlavní třídu Main a v ní by jsi chtěl mít panel, ze kterého by jsi měnil oba dva panely (Panel1 a Panel2).
Já bych to udělal tak, že bych si vytvořil další třídu (HlavniPanel), která dědí z JPanel. To by byl panel, který by měnil viditelnost u zbývajících dvou panelů. Dal jsi do něj tyhle řádky:

public HlavniPanel() {
    setBorder(new EmptyBorder(5, 5, 5, 5));
    setLayout(null);
}

a pak přidal Panel1 a Panel2 a nastavil jim parametry:

Panel1 panel1 = new Panel1(); //Vytvoříš si instance tříd Panel1
Panel2 panel2 = new Panel2(); //a Panel2

panel1.setBounds(xsouradnice, ysourandice, delka, vyska); //Toto hodně používám,
panel2.setBounds(xsouradnice, ysourandice, delka, vyska); //protože si můžeš nastavit
                                                        //místo a velikost componentu
add(panel1); //Přidá Panel1
add(panel2); //a Panel2 do hlavního panelu

Délku a šířku si nastav podle toho, jak velký máš JFrame. Následně bych přidal tlačítkům ActionListener:

jradiobutton1.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        panel1.setVisible(true); //panel1 se pomocí metody setVisible() zviditelní
        panel2.setVisible(false); //a panel2 se zneviditelní
    }
});

potom bych ActionListener přidal i druhému tlačítku, ale hodnoty v setVisible() musí být obrácené, jinak by se nic nezměnilo (a nezapomeň nastavit bounds i tlačítkům!).

A na konec zbývá to nejdůležitější. Do třídy Main musíš přidat hlavní panel. To uděláš stejně jako při přidávání Panel1 a Panel2 do HlavniPanel, jen mu už nemusíš nastavovat bounds.

Tak doufám, že jsem poradil :)

Nahoru Odpovědět
12.2.2015 17:42
Veni, vidi, programmato
Avatar
D0ll0k
Člen
Avatar
Odpovídá na Neaktivní uživatel
D0ll0k:13.2.2015 19:03

Zapomněl jsem zmínit, že tlačítka musíš přidat dřív než panely, jinak by nebyly vidět, protože potom budou za panelama.

Nahoru Odpovědět
13.2.2015 19:03
Veni, vidi, programmato
Avatar
Odpovídá na Rasto
Neaktivní uživatel:26.2.2015 15:59

No nefunguje mi to ;(

Nahoru Odpovědět
26.2.2015 15:59
Neaktivní uživatelský účet
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.