Saltar al contenido

Arrastrar y cambiar el tamaño de JFrame sin decoración

Si encuentras algún detalle que no comprendes puedes dejarlo en los comentarios y haremos todo lo posible de ayudarte rápidamente.

Solución:

Puedes ver el del Sr. Rob Camick ComponentResizer clase. Bastante simple y directo de usar.

Solo ejemplifica el ComponentResizer y registra el marco con algo como:

JFrame frame = new JFrame();
ComponentResizer cr = new ComponentResizer();
cr.registerComponent(frame);
cr.setSnapSize(new Dimension(10, 10));
cr.setMaximumSize(new Dimension(...));
cr.setMinimumSize(new Dimension(...));

Aquí hay un ejemplo completo del uso de la clase

ingrese la descripción de la imagen aquí

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

public class UndecoratedExample 

    private JFrame frame = new JFrame();

    class MainPanel extends JPanel 

        public MainPanel() 
            setBackground(Color.gray);
        

        @Override
        public Dimension getPreferredSize() 
            return new Dimension(400, 400);
        
    

    class BorderPanel extends JPanel 

        private JLabel label;
        int pX, pY;

        public BorderPanel() 
            label = new JLabel(" X ");
            label.setOpaque(true);
            label.setBackground(Color.RED);
            label.setForeground(Color.WHITE);

            setBackground(Color.black);
            setLayout(new FlowLayout(FlowLayout.RIGHT));

            add(label);

            label.addMouseListener(new MouseAdapter() 
                public void mouseReleased(MouseEvent e) 
                    System.exit(0);
                
            );
            addMouseListener(new MouseAdapter() 
                public void mousePressed(MouseEvent me) 
                    // Get x,y and store them
                    pX = me.getX();
                    pY = me.getY();

                

                 public void mouseDragged(MouseEvent me) 

                    frame.setLocation(frame.getLocation().x + me.getX() - pX,
                            frame.getLocation().y + me.getY() - pY);
                
            );

            addMouseMotionListener(new MouseMotionAdapter() 
                public void mouseDragged(MouseEvent me) 

                    frame.setLocation(frame.getLocation().x + me.getX() - pX,
                            frame.getLocation().y + me.getY() - pY);
                
            );
        
    

    class OutsidePanel extends JPanel 

        public OutsidePanel() 
            setLayout(new BorderLayout());
            add(new MainPanel(), BorderLayout.CENTER);
            add(new BorderPanel(), BorderLayout.PAGE_START);
            setBorder(new LineBorder(Color.BLACK, 5));
        
    

    private void createAnsShowGui() 
        ComponentResizer cr = new ComponentResizer();
        cr.setMinimumSize(new Dimension(300, 300));
        cr.setMaximumSize(new Dimension(800, 600));
        cr.registerComponent(frame);
        cr.setSnapSize(new Dimension(10, 10));
        frame.setUndecorated(true);
        frame.add(new OutsidePanel());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    

    public static void main(String[] args) 
        SwingUtilities.invokeLater(new Runnable() 
            public void run() 
                new UndecoratedExample().createAnsShowGui();
            
        );
    

Si te mola el asunto, tienes la habilidad dejar una noticia acerca de qué te ha gustado de esta reseña.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *