2011-04-23 18 views
5

He creado un pequeño juego de GUI en Java y en algún momento estoy usando GlassPane para bloquear temporalmente toda la entrada de mouse. He usado GlassPane antes sin ningún problema, pero esta vez no bloqueará la entrada del mouse. Así que todavía puedo presionar un botón que reside en el panel de contenido mientras GlassPane está habilitado, estoy seguro de que está habilitado porque puedo ver las cosas que pinto en él.glassPane no está bloqueando la entrada

Aquí es un pequeño fragmento de código ejecutable que es muestra el problema:

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Toolkit; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 


public class GuiGame { 

    private JPanel contentPane; 
    private JButton button; 
    private JFrame frame; 
    private JPanel glassPane; 
    private Dimension screenSize; 

    public static void main(String[] args) { 
     GuiGame gui = new GuiGame(); 
     gui.createGUI(); 
    } 

    public void createGUI() 
    { 
     frame = new JFrame("BadGuiGame!"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setResizable(false); 
     screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
     contentPane = new JPanel(); 
     contentPane.setPreferredSize(new Dimension(400, 400)); 
     contentPane.setBackground(Color.WHITE); 
     contentPane.setLayout(null); 
     frame.setContentPane(contentPane); 
     frame.pack(); 

     glassPane = new JPanel(); 
     glassPane.setOpaque(false); 
     glassPane.setLayout(null); 
     JLabel glassLabel = new JLabel("Glass Enabled"); 
     glassLabel.setBounds(160, 50, 80, 20); 
     glassPane.add(glassLabel); 
     frame.setGlassPane(glassPane); 

     int buttonWidth = frame.getWidth()/2; 
     int buttonHeight = frame.getHeight()/4; 
     int xButton = (frame.getWidth() - buttonWidth)/2; 
     int yButton = frame.getHeight()/2; 
     button = new JButton("NEXT LEVEL!"); 
     button.setFocusable(false); 
     button.setEnabled(true); 
     button.setBounds(xButton, yButton, buttonWidth, buttonHeight); 
     contentPane.add(button); 

     int x = (screenSize.width - frame.getWidth())/2; 
     int y = (screenSize.height - frame.getHeight())/2; 
     frame.setLocation(x, y); 
     frame.setVisible(true); 
     glassPane.setVisible(true); 
    } 
} 
+2

+1 para el [SSCCE] (http://sscce.org/) – AbdullahC

Respuesta

1

que iba a tratar de añadir un MouseListener a su GlassPane, y en todos los MouseEvents consumen el evento, tales como

public void mouseClicked(MouseEvent e) { 
    e.consume(); 
} 
+1

gracias! eso funcionó, ni siquiera necesitaba el método 'comsume()'. Aunque creó un nuevo problema. Tengo un JCombobox en el panel de cristal y desde que agregué los servidores de pantalla, no puedo desplazarme por la lista o seleccionar algo en la lista con el mouse. – Jesse

Cuestiones relacionadas