2014-06-11 84 views
0

從事家庭作業任務,我在解決如何在鼠標光標進入和退出某個着色區域時打印一行文本(本例中爲JPanel稱爲面板)的問題使用MouseListener接口。mouseEntered和mouseExited方法問題

我從底部面板(紅色,藍色或黃色)選擇一種顏色,然後當我移動到上部面板時,它應該能夠打印鼠標在面板中時輸入的顏色以及當我的鼠標在所述面板之外發現它時,我退出的顏色...

希望這是有道理的。這是迄今爲止我所擁有的代碼片段。這是紅色:

class RedButtonListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent event) 
     { 
      panel.setBackground(Color.RED); 
      class RedMouseListener implements MouseListener 
      { 

       public void mouseEntered(MouseEvent event) 
       { 

       } 

       public void mouseExited(MouseEvent event) 
       { 

       } 

       public void mousePressed(MouseEvent event) { } 

       public void mouseReleased(MouseEvent event) { } 

       public void mouseClicked(MouseEvent event) { } 
      } 
     } 
    } 
    ActionListener redListener = new RedButtonListener(); 
    bRed.addActionListener(redListener); 
+1

你永遠不會添加鼠標監聽器任何東西... – MadProgrammer

+0

歡迎來到堆棧溢出!考慮提供一個實際的[可運行示例來演示您的問題](https://stackoverflow.com/help/mcve)將涉及更少的猜測工作和更好的響應 – MadProgrammer

+0

addMouseListener,對吧?我會把它添加到課堂還是外面? – Hunter

回答

0

下面是從堆棧溢出Mouse moved event within JPanel

一個相關的問題,一旦你確保觸發器被正確地聆聽(試印刷的「Hello World」),從那裏我會建議您需要在鼠標事件中獲取顏色狀態的通信。如果所有內容都在同一個實例中,則只需訪問事件偵聽器中所需的變量即可。

這裏是的MouseEvent的文檔http://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseEvent.html

確保您添加的鼠標監聽嘗試以下

panel.addMouseListener(new RedMouseListener()); 

從簡單的開始做了以下工作

public void mouseEntered(MouseEvent event) 
{ 
    System.out.println("Hello World!"); 
} 

,如果你需要訪問事件監聽器中面板的顏色嘗試以下片段

panel.getBackground(); 

這將返回一個Color對象。

值得一提的是,額外的類聲明可以通過使用匿名內部類來避免。請參閱How are Anonymous (inner) classes used in Java?這些重寫的方法本質上是MouseListener的子類,但我們不需要按名稱調用它。

panel.addMouseListener(new MouseListener(){ 
    @Override 
    public void mouseReleased(MouseEvent e) {} 

    @Override 
    public void mousePressed(MouseEvent e) {} 

    @Override 
    public void mouseExited(MouseEvent e) {} 

    @Override 
    public void mouseEntered(MouseEvent e) {} 

    @Override 
    public void mouseClicked(MouseEvent e) {} 
}); 
+0

編譯沒有問題,但沒有顯示出來。無論我把addMouseListener放在哪裏,它都會給我一個錯誤,並且不會編譯。我確實需要這個,對吧? – Hunter

+0

@Hunter我正在做一個匿名類的例子,這將有所幫助。你是否想寫自己的RedMouseListener? – t3dodson

+0

啊,好吧,所以addMouseListener在這之後終於決定編譯,但是當我將鼠標懸停在RED區域上時,仍然沒有文字出現。我不確定你的意思,但我必須爲這三種顏色的每一種製作一個MouseListener。例如,我將點擊紅色按鈕,JPanel將變成紅色。當我將鼠標懸停在該區域上時,它會打印出「鼠標已進入紅色區域」。當它移出JPanel時,它會說「鼠標已經退出了紅色區域。」這將是所有三種顏色。 – Hunter