CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Page 2 of 2 FirstFirst 12
Results 16 to 18 of 18
  1. #16
    Join Date
    Feb 2011
    Posts
    19

    Re: Jpanel + Grid location using MouseListener

    I'm not quite sure what you mean =/ i actually have it working in two different way now and haven't decided which way to keep yet:

    small() is different to medium() and large()

    Code:
     import javax.swing.*;
    import javax.swing.border.*;
    import java.awt.*;
    import java.util.Random;
    import java.awt.Color.*;
    import java.awt.Cursor.*;
    import javax.swing.border.*;
    import java.awt.event.*;
    
    public class GridForGame extends JPanel {
    	JTextField myNumberArray[] = new JTextField[16];
    	MouseHandling handler = new MouseHandling();
    
    	JLabel statusbar = new JLabel("default");
    	JLabel tempLabel = new JLabel();
    
    	JPanel squareContainer = new JPanel();
    	Boolean handlerOn = false;
    
    	public GridForGame(){
    		setLayout(new BorderLayout());
    		setBackground(Color.gray);	
    		setBorder(new EtchedBorder(4, Color.blue, Color.blue));
    		setPreferredSize(new Dimension(600,600));
    	}
    
    	public void small(){
    
    		/*
    		 * Below empties the main game view so that
    		 * more can be 'painted' on it.
    		 */
    		squareContainer.removeAll();
    		revalidate();
    
    		// Set the grid for 8 x 8
            squareContainer.setLayout(new GridLayout(8,8));
            squareContainer.setPreferredSize(new Dimension(500,500));
            squareContainer.setMaximumSize(new Dimension(500,500));
    
            /*
    		 * Checks if a Mouse handler has already been
    		 * assigned to game view, if not, Add one!
    		 */
            if(!handlerOn){
            	squareContainer.addMouseListener(handler);
            	handlerOn = true;
       		}
    
            statusbar.setText("default");
            add(statusbar, BorderLayout.NORTH);
    
            for(int i=0; i<8; i++){
     
                for(int j=0; j<8; j++){
                    JLabel number = new JLabel();
    
                    number.setEnabled(true);
                    number.setOpaque(true);
                    number.setBorder(new MatteBorder(1, 1, 1, 1, Color.black));
    
                    for(int k=0; k<8; k++){
                        int n = new Random().nextInt(7);
                            switch(n){
                                case 0: number.setBackground(Color.red); break;
                                case 1: number.setBackground(Color.cyan); break;
                                case 2: number.setBackground(Color.blue); break;
                                case 3: number.setBackground(Color.green); break;
                                case 4: number.setBackground(Color.yellow); break;
                                case 5: number.setBackground(Color.magenta); break;
                                default:
                            }   
                        }
    
                         squareContainer.add(number);
                    }
            
                    //squareContainer.add(squares);
                }
            add(squareContainer);
            revalidate();
        }
    	
    	public void medium(){
    
    		/*
    		 * Below empties the main game view so that
    		 * more can be 'painted' on it.
    		 */
    		squareContainer.removeAll();
    		revalidate();
    
    		// Set the grid for 12 x 12
    		squareContainer.setLayout(new GridLayout(12,12));
    		squareContainer.setPreferredSize(new Dimension(500,500));
    		squareContainer.setMaximumSize(new Dimension(500,500));
    		
    		/*
    		 * Checks if a Mouse handler has already been
    		 * assigned to game view, if not, Add one!
    		 */
    		if(!handlerOn){
            	squareContainer.addMouseListener(handler);
            	handlerOn = true;
       		}
    
    		statusbar.setText("default");
    		add(statusbar, BorderLayout.NORTH);
    
    		for(int i=0; i<12; i++){
    			JPanel squares = new JPanel();
    			squares.setLayout(new GridLayout(1,1));
    			for(int j=0; j<12; j++){
    				JLabel number = new JLabel();
    				number.setEnabled(true);
    				number.setOpaque(true);
    				number.setBorder(new MatteBorder(1, 1, 1, 1, Color.black));
    
    				squares.add(number);
    				for(int k=0; k<12; k++){
    					int n = new Random().nextInt(7);
    						switch(n){
    							case 0: number.setBackground(Color.red); break;
    							case 1: number.setBackground(Color.cyan); break;
    							case 2: number.setBackground(Color.blue); break;
    							case 3: number.setBackground(Color.green); break;
    							case 4: number.setBackground(Color.yellow); break;
    							case 5: number.setBackground(Color.magenta); break;
    							default:
    						}	
    					}
    				}
    		
    				squareContainer.add(squares);
    			}
    		add(squareContainer);
    		revalidate();
    	}
    
    	public void large(){
    
    		/*
    		 * Below empties the main game view so that
    		 * more can be 'painted' on it.
    		 */
    		squareContainer.removeAll();
    		revalidate();
    
    		// Set the grid for 16 x 16
    		squareContainer.setLayout(new GridLayout(16,16));
    		squareContainer.setPreferredSize(new Dimension(500,500));
    		squareContainer.setMaximumSize(new Dimension(500,500));
    		
    		/*
    		 * Checks if a Mouse handler has already been
    		 * assigned to game view, if not, Add one!
    		 */
    		if(!handlerOn){
            	squareContainer.addMouseListener(handler);
            	handlerOn = true;
       		}
    
    		statusbar.setText("default");
    		add(statusbar, BorderLayout.NORTH);
    
    		for(int i=0; i<16; i++){
    			JPanel squares = new JPanel();
    			squares.setLayout(new GridLayout(1,1));
    			for(int j=0; j<16; j++){
    				JLabel number = new JLabel();
    				number.setEnabled(true);
    				number.setOpaque(true);
    				number.setBorder(new MatteBorder(1, 1, 1, 1, Color.black));
    
    				squares.add(number);
    				for(int k=0; k<16; k++){
    					int n = new Random().nextInt(7);
    						switch(n){
    							case 0: number.setBackground(Color.red); break;
    							case 1: number.setBackground(Color.cyan); break;
    							case 2: number.setBackground(Color.blue); break;
    							case 3: number.setBackground(Color.green); break;
    							case 4: number.setBackground(Color.yellow); break;
    							case 5: number.setBackground(Color.magenta); break;
    							default:
    						}	
    					}
    				}
    		
    				squareContainer.add(squares);
    			}
    		add(squareContainer);
    		revalidate();
    	}
    
    	private class MouseHandling implements MouseListener{
    		public void mouseClicked(MouseEvent event){
    			statusbar.setText(String.format("Clicked at &#37;d,%d", event.getX(), event.getY()));
    			System.out.println(String.format("Component clicked was " + findComponentAt(event.getX(), event.getY()).getBackground()));
    		}	
    
    		public void mousePressed(MouseEvent event){
    			statusbar.setText("anything");
    		}
    
    		public void mouseReleased(MouseEvent event){
    			statusbar.setText(String.format("Released at %d,%d", event.getX(), event.getY()));
    		}
    
    		public void mouseEntered(MouseEvent event){
    			statusbar.setText("Entered");
    		}
    
    		public void mouseExited(MouseEvent event){
    			statusbar.setText("Exited");
    		}
    	}
    
    }
    regardless, it seems to be working i think, I will be sure to do some further tests etc... tomorrow, but if you think I'm still doing something totally wrong, please point it out, will help the learning process.

    Thanks again dude, you've been a MASSIVE help

  2. #17
    dlorde is offline Elite Member Power Poster
    Join Date
    Aug 1999
    Location
    UK
    Posts
    10,163

    Re: Jpanel + Grid location using MouseListener

    Like I said, you should check the value returned by findComponentAt or getComponentAt, because it can return null, and your code will crash if it does.

    The best way to predict the future is to invent it...
    A. Kay
    Please use &#91;CODE]...your code here...&#91;/CODE] tags when posting code. If you get an error, please post the full error message and stack trace, if present.

  3. #18
    Join Date
    Feb 2011
    Posts
    19

    Re: Jpanel + Grid location using MouseListener

    Oh, I'll be sure to implement that once i've created the actual method that will do this, I just needed to run tests to make sure I was using the correct methods and so forth.

    Thanks!

Page 2 of 2 FirstFirst 12

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured