2014-01-12 2 views
2

마우스를 가리키면 그래픽 2D 문자열의 색상을 설정할 수 있습니까? 여기 Graphics2D 문자열에서 마우스를 가리키면 감지합니다.

지금까지 내 관련 코드입니다 :

@Override 
public void paint(Graphics g) { 
    super.paint(g); 
    Graphics2D g2d = (Graphics2D) g; 

    g2d.setColor(Color.white); 

    g2d.setFont(new Font("Arial", Font.BOLD, 16)); 
    g2d.drawString("EXIT", 650, 50); 
} 

MouseListener ml=new MouseListener() { 

     @Override 
     public void mouseClicked(MouseEvent e) { 
     } 

     @Override 
     public void mousePressed(MouseEvent e) { 
     } 

     @Override 
     public void mouseReleased(MouseEvent e) { 
     } 

     @Override 
     public void mouseEntered(MouseEvent e) { 
     //hover 
     //should do something here...   
     } 

     @Override 
     public void mouseExited(MouseEvent e) { 

     } 
    }; 
+0

을 필드에 색상을 저장하고 해당 필드를'mouseEntered'와'mouseExited'에서 업데이트하십시오. – VGR

+0

@VGR g2d 문자열이 마우스를 가리키고 있는지 확인하는 방법은 무엇입니까? – noobprogrammer

+0

아, 알겠습니다 ... 귀하의 구성 요소는 텍스트가 아닙니다. 나는 나의 이전 논평을 철회한다. MouseListener의 사용에 가세 해, MouseMotionListener를 사용합니다. – VGR

답변

2

의 MouseListener 외에도 MouseMotionListener 사용, 대신`Color.white`를 사용하는

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

public class TextHoverComponent extends JPanel { 
    private static final long serialVersionUID = 1; 

    private static final Color DEFAULT_TEXT_COLOR = Color.WHITE; 

    private static final Color HOVER_TEXT_COLOR = Color.RED; 

    private Font font = new Font("Arial", Font.BOLD, 16); 

    private String text = "EXIT"; 

    private Color textColor = DEFAULT_TEXT_COLOR; 

    private Point textLocation = new Point(650, 50); 

    public TextHoverComponent() { 
     addMouseListener(new MouseAdapter() { 
      @Override 
      public void mouseEntered(MouseEvent event) { 
       checkForHover(event); 
      } 

      @Override 
      public void mouseExited(MouseEvent event) { 
       checkForHover(event); 
      } 
     }); 

     addMouseMotionListener(new MouseMotionListener() { 
      @Override 
      public void mouseMoved(MouseEvent event) { 
       checkForHover(event); 
      } 

      @Override 
      public void mouseDragged(MouseEvent event) { 
       checkForHover(event); 
      } 
     }); 
    } 

    void checkForHover(MouseEvent event) { 
     FontMetrics metrics = getFontMetrics(font); 

     Graphics g = getGraphics(); 
     Rectangle textBounds = metrics.getStringBounds(text, g).getBounds(); 
     g.dispose(); 

     textBounds.translate(textLocation.x, textLocation.y); 

     if (textBounds.contains(event.getPoint())) { 
      textColor = HOVER_TEXT_COLOR; 
     } else { 
      textColor = DEFAULT_TEXT_COLOR; 
     } 
     repaint(textBounds); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 

     g.setFont(font); 
     g.setColor(textColor); 
     g.drawString(text, textLocation.x, textLocation.y); 
    } 
} 
관련 문제