[ _owl_ @ 29.07.2004. 20:15 ] @
Napravio sam dve klase koje treba da predstavljaju deo korisnickog GUI-a. Jedna klasa je zaduzena za iscrtavanje glavnog prozora (ova klasa takodje sadrzi i jedan JPanel objekat), dok druga treba da predstavlja odredjeni modul. U drugoj klasi se nalazi i JMeni objekat (svaki modul ima svoj meni), kao i JPanel (svaki modul u njega stavlja svoj korisnicki interfejs). Pri izboru neke od stavki iz menija trebalo bi da JPanel iz prve klase pokazuje JPanel iz druge klase (metode operation1Performed() i operation2Performed()). Svaka pomoc je dobrodosla. Zanimame i da li je ovakav nacin pisanja klasa za GUI ok??
Code:

import javax.swing.*;
import java.awt.event.*;

public class TestGUI {
    public static void main(String args[]) {
        Cordinator c=new Cordinator();
        Modul m=new Modul(c);
        c.showFrame();
    }
}

interface GUIModul {
}

class Modul implements GUIModul {
    private JMenu menu;
    private Cordinator cordinator;
    private String name="Modul 1";
    public Modul(Cordinator c) {
        cordinator=c;
        menu=new JMenu(name);
        JMenuItem operation1=new JMenuItem("Operation1");
        operation1.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    operation1Performed();
                }
            }
        );
        menu.add(operation1);
        JMenuItem operation2=new JMenuItem("Operation2");
        operation2.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    operation2Performed();
                }
            }
        );
        menu.add(operation2);
        c.addMenu(menu);
    }
    public void operation1Performed() {
        System.out.println("operation1");
        JPanel panel=new JPanel();
        JLabel label=new JLabel("Operation1 performed");
        panel.add(label);
        //cordinator.setPanel(panel);
        cordinator.getFrame().getContentPane().add(panel);
        cordinator.getFrame().repaint();
    }
    public void operation2Performed() {
        System.out.println("operation2");
        JPanel panel=new JPanel();
        JLabel label=new JLabel("Operation2 performed");
        panel.add(label);
        //cordinator.setPanel(panel);
        cordinator.getFrame().getContentPane().add(panel);
        cordinator.getFrame().repaint();
    }
}
class Cordinator {
    private JFrame frame;
    private JMenuBar menuBar;
    private JPanel panel;
    public Cordinator() {
        frame=new JFrame("TestMenu");
        panel=new JPanel();
        menuBar=new JMenuBar();
        frame.setJMenuBar(menuBar);
        frame.getContentPane().add(getDefaultPanel());
    }
    public JPanel getPanel() {
        return panel;
    }
    public void setPanel(JPanel p) {
        panel=p;
    }
    public JPanel getDefaultPanel() {
        JLabel label=new JLabel("Neki tekst");
        getPanel().add(label);
        return getPanel();
    }
    public JFrame getFrame() {
        return frame;
    }
    public void showFrame() {
        frame.setSize(400, 300);
        frame.setVisible(true);
    }
    public void addMenu(JMenu menu) {
        menuBar.add(menu);
    }

}



[ _owl_ @ 30.07.2004. 22:46 ] @
Sto volim da sam sebi odgovaram. DAkle bilo je potrebno prepraviti setPanel() i operation1Performed metode. Tj prvo treba ubiti prethodni JPanel, postaviti novi i pozvati metodu validate() i repaint() ContentPane-a zeljenog JFrame objekta.
Code:

    public void operation1Performed() {
        System.out.println("operation1");
        JPanel panel=new JPanel();
        JLabel label=new JLabel("Operation1 izvrsena");
        panel.add(label);
        cordinator.setPanel(panel);
    }


Code:

    public void setPanel(JPanel p) {
        frame.getContentPane().remove(panel);
        panel=p;
        frame.getContentPane().add(panel);
        frame.getContentPane().validate();
        frame.getContentPane().repaint();
    }