2012-08-22 80 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