2011-04-23 8 views
5

Tôi đã xây dựng một trò chơi GUI nhỏ trong java và tại một số điểm tôi đang sử dụng glassPane để tạm thời chặn tất cả các thông tin đầu vào. Tôi đã sử dụng glassPane trước đó mà không có bất kỳ vấn đề gì nhưng lần này nó sẽ không chặn đầu vào của chuột. Vì vậy, tôi vẫn có thể nhấn một nút nằm trên contentPane trong khi glassPane được kích hoạt, tôi chắc chắn rằng nó được kích hoạt bởi vì tôi có thể nhìn thấy những thứ tôi vẽ trên đó.glassPane không chặn đầu vào

Đây là một đoạn mã ngắn Runnable đó cho thấy vấn đề:

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 cho [SSCCE] (http://sscce.org/) – AbdullahC

Trả lời

1

tôi muốn thử thêm một MouseListener để glasspane của bạn, và trên tất cả MouseEvents tiêu thụ sự kiện này, chẳng hạn như

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

cảm ơn! đã làm việc, tôi thậm chí không cần phương thức 'comsume()'. Mặc dù nó đã tạo ra một vấn đề mới. Tôi có một JCombobox trên glassPane và kể từ khi tôi thêm các mouselisteners, tôi không thể di chuyển qua danh sách hoặc chọn một cái gì đó trong danh sách nữa với con chuột. – Jesse