Newsgroup: it.comp.java
Titolo: JMenu

Ciao a tutti,
sto scrivendo un programma a fine didattico per apprendere le classi Swing.
Nel citato programma č presente una JMenuBar con relativo JMenu. Fino a qui
tutto bene. Ma se aggiungo un TextArea al Top Level Container sembra che il
menu a comparsa del Jmenu venga coperto dal TextArea. Come mai? Dove
sbaglio?
Grazie a tutti
Mr. Deckard

Come mai? Dove sbaglio?
Difficile dirlo: posta un po' di codice.
-- 
Ciao
	Fabrizio C.

 Difficile dirlo: posta un po' di codice.
Sembra essersi risolto il problema. Ti ringrazio comunque.
Non capisco all'inizio dello sviluppo del seguente programma test, se
utilizzavo JTextArea la tendina del menu file veniva occultata dal
JTextArea stesso, il problema scompariva con una JTextField, ora
invece funziona comunque. Non ho capito quele fosse il problema. Ecco
il codice, chiedo scusa se stilisticamente è sbagliato, ma sono
novello, anzi ogni critica è ben accetta:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class TestGui2 extends JFrame{
    private JPopupMenu popupMenu;
    public JTextArea txtArea;
    public JPasswordField pwdArea;
    public TestGui2(){
        super("Test Gui 2");
        setBounds(10,35,350,150);
 
        txtArea = new JTextArea("Clicca il tasto destro del mouse!");
        pwdArea = new JPasswordField();
        //Creo una Manu bar
        JMenuBar menuBar = new JMenuBar();
        JMenu file = new JMenu("File");
        JMenuItem open = new JMenuItem("Open");
        JMenuItem save = new JMenuItem("Save");
        JMenuItem clear = new JMenuItem("Clear");
        JMenuItem exit = new JMenuItem("Exit");  
        MyAction myAction = new MyAction();
        //txtArea.setAction(myAction);
        file.add(open);
        file.add(save);
        file.add(myAction);
        file.add(exit);
 
        menuBar.add(file);
        //Creo una ToolBar
        JToolBar toolBar = new JToolBar();
        ImageIcon icon = new
ImageIcon("C:/j2sdk1.4.1_01/sorgenti/netinventions/img2.gif");
        JButton b = new JButton(icon);
        toolBar.setFloatable(true);
        toolBar.add(b);
        toolBar.add(myAction);
        setJMenuBar(menuBar);
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(BorderLayout.SOUTH,toolBar);
        getContentPane().add(BorderLayout.NORTH, pwdArea);
        getContentPane().add(BorderLayout.CENTER,txtArea);
       // getContentPane().add(BorderLayout.NORTH,menuBar);
 
        //Creo JPopMenu
        popupMenu = new JPopupMenu();
        JMenuItem item1 = new JMenuItem("Voce uno");
        JMenuItem item2 = new JMenuItem("Voce due");
        JMenuItem item3 = new JMenuItem("Voce tre");
        popupMenu.add(item1);
        popupMenu.add(item2);
        popupMenu.add(item3);
        popupMenu.add(myAction);
        PopupListener popupListener = new PopupListener();
        PasswordListener passwordListener = new PasswordListener();
        pwdArea.addActionListener(passwordListener);
        txtArea.addMouseListener(popupListener);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
 
    class PopupListener extends MouseAdapter{
        public void mousePressed(MouseEvent e){
            if (e.isPopupTrigger()){
               apriPopupMenu(e);
            }
        }
 
        public void mouseReleased(MouseEvent e){
            if (e.isPopupTrigger()){
                apriPopupMenu(e);
            }
        }
    }
 
    private void apriPopupMenu(MouseEvent e){
        popupMenu.show(e.getComponent(), e.getX(), e.getY());
    }
    private void clearArea(){
        txtArea.setText("");
    }
    class MyAction extends AbstractAction{
 
        public MyAction(){
            super("Clear");
        }
        /** Invoked when an action occurs.
         *
         */
        public void actionPerformed(ActionEvent e) {
            clearArea();
        }
 
    }
 
    class PasswordListener implements ActionListener{
 
        /** Invoked when an action occurs.
         *
         */
        public void actionPerformed(ActionEvent e) {
            char chr[];
            String pwd = new String("");
            chr = pwdArea.getPassword();
            for (int i=0;i<=chr.length-1;i++)
                pwd += chr[i];
            txtArea.setText(pwd);
        }
 
    }
    public static void main(String argv[]){
        TestGui2 fr = new TestGui2();
    }
}
Qualche tempo fa, avevo già postato su come realizzare una JComboBox
che oltre ad avere la su etichetta avesse anche un valore (ad esempio
numerico associato). Mi è stato fatto osservare che al costruttore si
può passare un Vector o un Object, ma non ne sono venuto a campo,
anche pur vedendo i tutorial della sun. Potreste darmi un esempio. Vi
ringrazio molto.
Mr. Deckard

       // getContentPane().add(BorderLayout.NORTH,menuBar);
Se usavi questa linea per aggiungere la barra dei menu, allora... abbiamo 
trovato la causa dei tuoi problemi ;-)
Accodo la tua classe un po' rimaneggiata: forse cambierei ancora alcune 
cose, ma... per oggi basta.
Non ho messo commenti sui cambiamenti, ma dal confronto dovresti capire 
tutto ciň che ti serve.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TestGui2 extends JFrame {
    private Action clearAction;
    public JTextArea txtArea;
    public JPasswordField pwdArea;
    public TestGui2() {
        super("Test Gui 2");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        buildGUI();
        setLocation(10, 35);
        setSize(350, 150);
        setVisible(true);
    }
    private void buildGUI() {
        buildClearAction();
        buildTextArea();
        buildPwdArea();
        JPanel p = new JPanel(new BorderLayout());
        p.add(getToolBar(), BorderLayout.SOUTH);
        p.add(pwdArea, BorderLayout.NORTH);
        p.add(txtArea, BorderLayout.CENTER);
        this.setContentPane(p);
        this.setJMenuBar(getMenu());
    }
    private void buildClearAction() {
        clearAction = new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                clearArea();
            }
        };
        clearAction.putValue(Action.NAME, "Clear");
    }
    private void clearArea() {
        txtArea.setText("");
    }
    private void buildTextArea() {
        final JPopupMenu popupMenu = getPopupMenu();
        txtArea = new JTextArea("Clicca il tasto destro del mouse!");
        txtArea.addMouseListener(new MouseAdapter() {
            public void mouseReleased(MouseEvent e) {
                if (e.isPopupTrigger()) {
                    popupMenu.show(e.getComponent(), e.getX(), e.getY());
                }
            }
        });
    }
    private JPopupMenu getPopupMenu() {
        JPopupMenu popupMenu = new JPopupMenu();
        popupMenu.add(new JMenuItem("Voce uno"));
        popupMenu.add(new JMenuItem("Voce due"));
        popupMenu.add(new JMenuItem("Voce tre"));
        popupMenu.add(clearAction);
        return popupMenu;
    }
    private void buildPwdArea() {
        pwdArea = new JPasswordField();
        pwdArea.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                txtArea.setText(new String(pwdArea.getPassword()));
            }
        });
    }
    private JToolBar getToolBar() {
        JToolBar toolBar = new JToolBar();
        toolBar.setFloatable(true);
        ImageIcon icon = new ImageIcon(
             "C:/j2sdk1.4.1_01/sorgenti/netinventions/img2.gif");
        JButton b = new JButton(icon);
        toolBar.add(b);
        toolBar.add(clearAction);
        return toolBar;
    }
    private JMenuBar getMenu() {
        JMenu file = new JMenu("File");
        file.add(new JMenuItem("Open"));
        file.add(new JMenuItem("Save"));
        file.add(clearAction);
        file.addSeparator();
        file.add(new JMenuItem("Exit"));
        JMenuBar menuBar = new JMenuBar();
        menuBar.add(file);
        return menuBar;
    }
    public static void main(String[] argv) {
        TestGui2 fr = new TestGui2();
    }
}
-- 
Ciao
	Fabrizio C.