2012-08-22 79 views
2

我有一個文本區域,每當滾動條滾動時,我想調用一個方法。在什麼情況下我應該調用這個方法?我試過了:JTextArea滾動條事件

private void jScrollPane1MouseReleased(java.awt.event.MouseEvent evt) { 
     //execute(); 
    System.out.println("Scroller Moved");  
} 
+2

你試圖實現什麼***功能?向我解釋你可能會向最終用戶解釋的方式。想要在自己的代碼中訪問與滾動相關的方法,對它有着極其糟糕的代碼味道。 –

+1

什麼用於與鍵盤進行交互,例如使用箭頭鍵? – Robin

+0

@AndrewThompson Nick Rippe解決方案非常完美。當jtextarea中的行號發生變化時,我想要一個事件。 Robin,Nick Rippe解決方案正在照顧我的目的,因爲我輸入密鑰或通過箭頭鍵移動光標 – FirmView

回答

3

你想在JScrollBar上使用AdjustmentListener(選擇你想聽的移動)。這是一個在垂直欄上收聽的例子。

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

public class TempProject extends JPanel{ 

    public static void main(String args[]) { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       JFrame frame = new JFrame(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       JPanel panel = new JPanel(); 
       panel.setPreferredSize(new Dimension(300, 2000)); 
       JScrollPane pane = new JScrollPane(panel); 
       pane.setPreferredSize(new Dimension(400, 300)); 
       pane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener(){ 

        @Override 
        public void adjustmentValueChanged(AdjustmentEvent e) { 
         System.out.println("Hi Mom!"); 
        }}); 

       frame.setContentPane(pane); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

} 
+1

對於主要內容+1,但我可能會在下次看到setXXSize時嘗試downvote ;-) – kleopatra

+1

@kleopatra我不太清楚你指的是什麼 - 我假設其中一個setPreferredSize調用「面板」或「窗格」(或兩者)。如果這樣做有什麼問題,我會很感激這些信息 - 我沒有在快速搜索中找到任何東西。它在這段代碼中的原因是因爲我想強制一個滾動條。 –

+1

抱歉,因爲沒有完全清楚:證明它是完美的(最好提示它僅用於演示)。 [一些不使用的原因](http://stackoverflow.com/a/7229519/203657)它在生產代碼 – kleopatra

1

使用的mouseClicked方法,然後使用的getX()和的getY()獲取座標,然後用if測試,測試,看看座標是否在JScrollPane的維度內。只記得實現鼠標器並添加所有繼承的抽象方法:)

+2

ehh ..不完全是:片段(由可視構建器生成,可能是NetBeans)是由JScrollPane上自動安裝的MouseListener發出的回調消息。這意味着事件在scrollPane的維度內是_always_。因此它很少會被調用,因爲它的大部分區域都被其他組件填充。 – kleopatra