es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

colocando dos JMenu uno al lado del otro en JAVA

Añadí dos JMenus en un marco:

JFrame frame = new JFrame();
// Menú:
menuBar = new JMenuBar();
menu = new JMenu("Fichier");
menu2 = new JMenu("Options");
JSeparator sep = new JSeparator(SwingConstants.VERTICAL);
JButton btn = new JButton();
btn.addActionListener(MyListener);
menuBar.add(menu);
menuBar.add(sep);
menuBar.add(menu2);
frame.setJMenuBar(menuBar);

Este es el resultado que quiero:
Resultado deseado

Este es el resultado que obtengo:
Resultado obtenido

Por favor, dame alguna idea de cómo se hizo este marco:
Ideas de cómo se hizo el marco

Intenté hacer esto con un JWindow y añadir un JTextArea, pero toma el tamaño de toda la ventana y ni siquiera puedo escribir en él.

Código para JWindow:

public class Fenetre extends JWindow
{
    int X;
    int Y;
    JTextArea ta;

    Fenetre()
    {
        setBounds(50, 50, 300, 300);
        ta = new JTextArea();
        JScrollPane scrollPane = new JScrollPane(ta);
        add(ta);

        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) 
            {
                X = e.getX();
                Y = e.getY();
            }
        });

        addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseDragged(MouseEvent e) 
            {
                Point p = getLocation();
                setLocation(p.x + (e.getX() - X), p.y + (e.getY() - Y));
            }
        });

        this.setVisible(true);
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado deseado, puedes utilizar menús anidados JMenus y un JMenuItem para “Enregistrer” y “Annuler” en lugar de utilizar un separador y un JButton. Aquí tienes un ejemplo de código:

    JFrame frame = new JFrame();
    // Menú:
    JMenuBar menuBar = new JMenuBar();
    JMenu menu = new JMenu("Fichier");
    JMenu submenu = new JMenu("Enregistrer");
    JMenuItem menuItem = new JMenuItem("Enregistrer");
    submenu.add(menuItem);
    menu.add(submenu);
    menu.add(new JSeparator());
    menuItem = new JMenuItem("Annuler");
    menu.add(menuItem);
    menuBar.add(menu);
    
    menu = new JMenu("Options");
    menuBar.add(menu);
    
    frame.setJMenuBar(menuBar);
    

    Esto creará un submenú anidado para “Enregistrer” y “Annuler” bajo el menú “Fichier”, así como un menú separado “Options”. Puedes agregar más elementos y submenús según sea necesario.

    En cuanto al JWindow con un JTextArea, el problema es que el JTextArea ocupa todo el espacio de la ventana. Puedes establecer su tamaño preferido a un valor más pequeño y agregarlo a un JScrollPane para habilitar el desplazamiento. Aquí tienes un código actualizado:

    public class Fenetre extends JWindow
    {
        int X;
        int Y;
        JTextArea ta;
    
        Fenetre()
        {
            setBounds(50, 50, 300, 200); // altura reducida
            ta = new JTextArea();
            ta.setPreferredSize(new Dimension(200, 100)); // establecer tamaño preferido
            JScrollPane scrollPane = new JScrollPane(ta);
            add(scrollPane); // agregar panel de desplazamiento en lugar de área de texto
    
            // mismo código de listeners de ratón que antes
    
            this.setVisible(true);
        }
    }
    

    Esto creará una JWindow más pequeña con un JTextArea desplazable. Puedes redimensionar la ventana según sea necesario y el área de texto se ajustará en consecuencia.

Comments are closed.