2011-02-13 4 views
0

Bubble Breaker 게임의 거품과 일치하도록 배경색과 ICON이 무작위로 할당 된 JLabel 격자가 있으므로 findComponentAt (getX(), getY()를 사용하면 문제가 발생합니다.))를 클릭하여 구성 요소가 메신저를 얻을 .... 이것은 어떤 레이블을 내가 클릭하고 ICON을 다른 ICON으로 변경하려고하지만 구성 요소 API에 setIcon() 메소드가없는 것 같기 때문에 ICON을 어떻게 바꿀 수 있었는지에 대한 제안?구성 요소에서 JLabel ICON 변경

내 파일은 아래에 나와 있습니다.하지만 난 아직도 분명히 개발 중이므로 지저분합니다. 너무 미안합니다. 구성 요소가 instanceof 연산자를 통해 JLabel의 인 경우

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; 
boolean colourChanged = false; 

ImageIcon redBubble; 
ImageIcon blueBubble; 
ImageIcon yellowBubble; 
ImageIcon orangeBubble; 
ImageIcon greenBubble; 
ImageIcon pinkBubble; 
ImageIcon purpleBubble; 


public void smallIcons(){ 
    redBubble = new ImageIcon("images/redSmall.jpg"); 
    blueBubble = new ImageIcon("images/blueSmall.jpg"); 
    yellowBubble = new ImageIcon("images/yellowSmall.jpg"); 
    orangeBubble = new ImageIcon("images/orangeSmall.jpg"); 
    greenBubble = new ImageIcon("images/greenSmall.jpg"); 
    pinkBubble = new ImageIcon("images/pinkSmall.jpg"); 
    purpleBubble = new ImageIcon("images/purpleSmall.jpg"); 
} 

public void mediumIcons(){ 
    redBubble = new ImageIcon("images/redMedium.jpg"); 
    blueBubble = new ImageIcon("images/blueMedium.jpg"); 
    yellowBubble = new ImageIcon("images/yellowMedium.jpg"); 
    orangeBubble = new ImageIcon("images/orangeMedium.jpg"); 
    greenBubble = new ImageIcon("images/greenMedium.jpg"); 
    pinkBubble = new ImageIcon("images/pinkMedium.jpg"); 
} 

public void largeIcons(){ 
    redBubble = new ImageIcon("images/redLarge.jpg"); 
    blueBubble = new ImageIcon("images/blueLarge.jpg"); 
    yellowBubble = new ImageIcon("images/yellowLarge.jpg"); 
    orangeBubble = new ImageIcon("images/orangeLarge.jpg"); 
    greenBubble = new ImageIcon("images/greenLarge.jpg"); 
    pinkBubble = new ImageIcon("images/pinkLarge.jpg"); 
} 

public GridForGame(){ 
    setLayout(new BorderLayout()); 
    setBackground(Color.gray); 
    setBorder(new EtchedBorder(4, Color.blue, Color.blue)); 
    setPreferredSize(new Dimension(600,600)); 
} 

public void small(){ 

    smallIcons(); 
    /* 
    * 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); 
           number.setIcon(redBubble); break; 
         case 1: number.setBackground(Color.cyan); 
           number.setIcon(orangeBubble); break; 
         case 2: number.setBackground(Color.blue); 
           number.setIcon(blueBubble); break; 
         case 3: number.setBackground(Color.green); 
           number.setIcon(greenBubble); break; 
         case 4: number.setBackground(Color.yellow); 
           number.setIcon(yellowBubble); break; 
         case 5: number.setBackground(Color.magenta); 
           number.setIcon(pinkBubble); break; 
         default: 
        } 
       } 

       squareContainer.add(number); 
      } 

      //squareContainer.add(squares); 
     } 
    add(squareContainer); 
    revalidate(); 
} 

public void medium(){ 

    mediumIcons(); 

    /* 
    * 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); 
           number.setIcon(redBubble); break; 
         case 1: number.setBackground(Color.cyan); 
           number.setIcon(orangeBubble); break; 
         case 2: number.setBackground(Color.blue); 
           number.setIcon(blueBubble); break; 
         case 3: number.setBackground(Color.green); 
           number.setIcon(greenBubble); break; 
         case 4: number.setBackground(Color.yellow); 
           number.setIcon(yellowBubble); break; 
         case 5: number.setBackground(Color.magenta); 
           number.setIcon(pinkBubble); break; 
         default: 
        } 
       } 
      } 

      squareContainer.add(squares); 
     } 
    add(squareContainer); 
    revalidate(); 
} 

public void large(){ 

    largeIcons(); 

    /* 
    * 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); 
           number.setIcon(redBubble); break; 
         case 1: number.setBackground(Color.cyan); 
           number.setIcon(orangeBubble); break; 
         case 2: number.setBackground(Color.blue); 
           number.setIcon(blueBubble); break; 
         case 3: number.setBackground(Color.green); 
           number.setIcon(greenBubble); break; 
         case 4: number.setBackground(Color.yellow); 
           number.setIcon(yellowBubble); break; 
         case 5: number.setBackground(Color.magenta); 
           number.setIcon(pinkBubble); break; 
         default: 
        } 
       } 
      } 

      squareContainer.add(squares); 
     } 
    add(squareContainer); 
    revalidate(); 
} 

private class MouseHandling implements MouseListener{ 
    public void mouseClicked(MouseEvent event){ 
     statusbar.setText(String.format("Clicked at %d,%d", event.getX(), event.getY())); 
     System.out.println(String.format("Component clicked was " + findComponentAt(event.getX(), event.getY()).getBackground())); 

     /*JLabel temp = new JLabel(); 

     temp = findComponentAt(event.getX(), event.getY());*/ 

     if(colourChanged == true){ 
      findComponentAt(event.getX(), event.getY()).setBackground(Color.white); 
      System.out.println("selected label now set to white"); 
     } 

     if(colourChanged == false){ 
      findComponentAt(event.getX(), event.getY()).setBackground(Color.black); 
      System.out.println("selected label now set to black"); 
      colourChanged = true; 
     } 
    } 

    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"); 
    } 
} 

} 

답변

1

확인하고, 다른 true의 경우 다음 마우스 리스너 방법 중 거짓, 출구는, 그리고 캐스팅 경우 :

코드는 ... 이상한 붙여 넣기한다 JLabel 아이콘을 설정합니다. 예를 들면 :

public void mouseClicked(MouseEvent event){ 
    statusbar.setText(String.format("Clicked at %d,%d", event.getX(), event.getY())); 
    System.out.println(String.format("Component clicked was " + findComponentAt(event.getX(), event.getY()).getBackground())); 

    Component comp = findComponentAt(event.getX(), event.getY()); 
    if (!(comp instanceof JLabel)) { 
     return; // if it's not a JLabel get out of this method 
    } 

    // it is a JLabel so cast it. 

    JLabel temp = (JLabel) comp; 

    // now you can use the JLabel 
0

당신은 당신의 라벨을 찾기 위해는 event.getSource() 메소드를 사용해야하고 당신이 JLabel의에 캐스팅 수 있으며, 아이콘을 변경

public void mouseClicked(MouseEvent e) { 
     Object o; 
     if((o = e.getSource()) instanceof JLabel){ 
      JLabel source = (JLabel) o; 
      source.setIcon(icon); 
      //Now you can use your JLabel 
     } 
    } 
관련 문제