Takže pro představu, programujeme ve škole jednoduchou gui aplikaci, která má zajišťovat pro firmu evidenci zákazníků, zaměstnanců, objednávek .. a protože je tam spousta oken a menu bude všude stejný, tak jsem ho chtěl prdnout do zvláštní třídy, a pak si ho v oknech zavolat .. vypadá to asi takhle:
package gui;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
/**
*
* @author Ondra
*/
public class Menu extends JMenuBar {
private JMenu souborMenu;
private JMenuItem konecMenuItem;
private JMenu napovedaMenu;
private JMenuItem oProgramuMenuItem;
private JMenuItem napovedaMenuItem;
private OknoNapovedy oknoNapovedy;
private JMenuBar menu;
public Menu() {
menu = new JMenuBar();
souborMenu = new JMenu("Soubor");
souborMenu.setMnemonic(KeyEvent.VK_S);
menu.add(souborMenu);
souborMenu.addSeparator();
napovedaMenu = new JMenu("Nápověda");
konecMenuItem = new JMenuItem("Konec");
souborMenu.add(konecMenuItem);
konecMenuItem.addActionListener(new KonecEvidence());
konecMenuItem.setMnemonic(KeyEvent.VK_K);
menu.add(napovedaMenu);
oProgramuMenuItem = new JMenuItem("O Programu");
oProgramuMenuItem.addActionListener(new OProgramu());
oProgramuMenuItem.setMnemonic(KeyEvent.VK_O);
napovedaMenu.setMnemonic(KeyEvent.VK_V);
napovedaMenu.add(oProgramuMenuItem);
napovedaMenuItem = new JMenuItem("Nápověda k aplikaci");
napovedaMenuItem.setMnemonic(KeyEvent.VK_A);
napovedaMenu.add(napovedaMenuItem);
napovedaMenuItem.addActionListener(new Napoveda());
}
private class KonecEvidence implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
/**
* Vnitřní třída, implementující okno O programu v hlavním menu
*/
private class OProgramu implements ActionListener {
public void actionPerformed(ActionEvent evt) {
JOptionPane.showMessageDialog(null,
"blabla");
}
}
/**
* * Vnitřní třída implementující ActionListener
* slouží k zobrazení nápovědy k programu volbou z menu.
*
*/
private class Napoveda implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
oknoNapovedy = new OknoNapovedy("/zdroje/napoveda.html");
oknoNapovedy.setVisible(true);
}
}
}
a ve třídě, která dělá okno, je mj. tohle:
private Menu menu;
public UvodniOkno() {
// initMenu();
init();
setVisible(true);
}
/**
* Metoda inicializuje a propojuje jednotlivé komponenty GUI
*/
private void init() {
uvodniOknoFrame = new JFrame();
menu = new Menu();
uvodniOknoFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
uvodniOknoFrame.setTitle("Hodinoví Bozi");
uvodniOknoFrame.setSize(700, 400);
uvodniOknoFrame.setLocation(150, 150);
uvodniOknoFrame.setJMenuBar(menu);
uvodniOknoFrame.setResizable(false);
a tak dále ..
a to menu tam prostě nemám. když obsah třídy menu víceméně hodim přímo do okna, tak to funguje .. určitě dělám nějakou debilní chybu :)
|