2012-04-25 44 views
3

我正在NetBeans平台(netbeans模块)中开发一个桌面应用程序,其中有一个桌面窗格和一个jscrollbar。我已经实现MouseWheelListener的,并在类的构造函数中添加鼠标滚轮侦听器在jscrollbar中不工作

scrollBar.addMouseWheelListener(this); 

。现在,当我滚动鼠标滚轮,虽然我在上面SOUT的

private void scrollBarMouseWheelMoved(java.awt.event.MouseWheelEvent evt) { 


System.out.println("mouse value is------------ " + evt.paramString()); 
} 

输出中获取值它不滚动滚动条

mouse value is------------ MOUSE_WHEEL,(8,49),absolute(0,0),button=0,clickCount=0,scrollType=WHEEL_UNIT_SCROLL,scrollAmount=3,wheelRotation=1 

什么应该怎么办,使mosue jscrollbar上的滚轮事件?

我已经搜查,但我发现滚动面板的事件,但我明确地寻找滚动条..

我已删除多余的代码,并显示什么,我在下面的示例代码

public final class ScrollableWindow1TopComponent extends TopComponent implements ComponentListener, MouseWheelListener { 

    private javax.swing.JScrollBar scrollBar; 
    private javax.swing.JDesktopPane scrollableGraphnewContainer; 

    public ScrollableWindow1TopComponent() { 
     this.addComponentListener(this); 
     scrollBar.addMouseWheelListener(this); 

    } 
    private void scrollBarMouseWheelMoved(java.awt.event.MouseWheelEvent evt) {           
     System.out.println("mouse value is------------ " + evt.paramString()); 
    } 
    private void scrollBarAdjustmentValueChanged(java.awt.event.AdjustmentEvent evt) { 
     //code that works fine 
    } 
    } 
+2

自动处理为更好地帮助越早,请包括[SSCCE(HTTP:/ /www.sscce.org)。 – user1329572 2012-04-25 12:26:12

+1

*“这里是一个示例代码”*为了更好地提供帮助,请发布** [SSCCE](http://sscce.org/)** – 2012-04-25 12:30:54

+0

请注意正确使用大写的J2SE类名称。当我意识到我的时间会更好地帮助其他人时,我正要编辑这个混乱。 – 2012-04-25 12:32:07

回答

1

我实际的问题是,我没有得到改变了鼠标滚轮改变滚动的价值,但我是越来越鼠标滚轮事件,所以我必须解决如下:

private void scrollBarMouseWheelMoved(java.awt.event.MouseWheelEvent evt) {           
     if (evt.getUnitsToScroll() > 0) { 
      scrollBar.setValue(scrollBar.getValue() + 1); 
     } else { 
      scrollBar.setValue(scrollBar.getValue() - 1); 
     } 
    }  

每次我滚轮向上侧EVT .getUnitsToScroll()给出了积极的价值和降低它给了负值,所以我增加滚动条和其他东西的价值由

private void scrollBarAdjustmentValueChanged(java.awt.event.AdjustmentEvent evt) { 
    //my code... 
} 
7

寻找我认为你在AdjustmentListener,而不是MouseXxxListener有看,

final JScrollBar scrollBar = myScrollpane.getVerticalScrollBar(); 
scrollBar.addAdjustmentListener(new AdjustmentListener() { 

    @Override 
    public void adjustmentValueChanged(AdjustmentEvent e) { 
     System.out.println("JScrollBar's current value = " + scrollBar.getValue()); 
    } 
}); 

在我身边:-)

enter image description here

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

public class ListPanel extends JFrame { 

    private static final long serialVersionUID = 1L; 

    public ListPanel() { 
     setLayout(new GridLayout(0, 2, 10, 10)); 
     DefaultListModel model = new DefaultListModel(); 
     model.addElement(createButtons("one")); 
     model.addElement(createButtons("two")); 
     model.addElement(createButtons("three")); 
     model.addElement(createButtons("four")); 
     model.addElement(createButtons("five")); 
     model.addElement(createButtons("six")); 
     model.addElement(createButtons("seven")); 
     model.addElement(createButtons("eight")); 
     model.addElement(createButtons("nine")); 
     model.addElement(createButtons("ten")); 
     model.addElement(createButtons("eleven")); 
     model.addElement(createButtons("twelwe")); 
     JList list = new JList(model); 
     list.setCellRenderer(new PanelRenderer()); 
     JScrollPane scroll1 = new JScrollPane(list); 
     final JScrollBar scrollBar = scroll1.getVerticalScrollBar(); 
     scrollBar.addAdjustmentListener(new AdjustmentListener() { 

      @Override 
      public void adjustmentValueChanged(AdjustmentEvent e) { 
       System.out.println("JScrollBar's current value = " + scrollBar.getValue()); 
      } 
     }); 
     add(scroll1); 
     JScrollPane scroll2 = new JScrollPane(createPanel()); 
     add(scroll2);   
     final JScrollBar scrollBar1 = scroll2.getVerticalScrollBar(); 
     scrollBar1.addAdjustmentListener(new AdjustmentListener() { 

      @Override 
      public void adjustmentValueChanged(AdjustmentEvent e) { 
       System.out.println("JScrollBar's current value = " + scrollBar1.getValue()); 
      } 
     }); 

    } 

    public static JPanel createPanel() { 
     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(0, 1, 1, 1)); 
     panel.add(createButtons("one")); 
     panel.add(createButtons("two")); 
     panel.add(createButtons("three")); 
     panel.add(createButtons("four")); 
     panel.add(createButtons("five")); 
     panel.add(createButtons("six")); 
     panel.add(createButtons("seven")); 
     panel.add(createButtons("eight")); 
     panel.add(createButtons("nine")); 
     panel.add(createButtons("ten")); 
     panel.add(createButtons("eleven")); 
     panel.add(createButtons("twelwe")); 
     return panel; 
    } 

    public static JButton createButtons(String text) { 
     JButton button = new JButton(text); 
     return button; 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      public void run() { 
       ListPanel frame = new ListPanel(); 
       frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
       //frame.pack(); 
       frame.setSize(270, 200); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    class PanelRenderer implements ListCellRenderer { 

     public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
      JButton renderer = (JButton) value; 
      renderer.setBackground(isSelected ? Color.red : list.getBackground()); 
      return renderer; 
     } 
    } 
} 

输出的System.out.println(...)

编辑

:-)没有,没有任何问题

run: 
JScrollBar's current value = 0 
JScrollBar's current value = 0 
JScrollBar's current value = 1 
JScrollBar's current value = 2 
JScrollBar's current value = 3 
JScrollBar's current value = 4 
JScrollBar's current value = 5 
JScrollBar's current value = 6 
JScrollBar's current value = 7 
JScrollBar's current value = 8 
JScrollBar's current value = 9 
JScrollBar's current value = 10 
JScrollBar's current value = 11 
JScrollBar's current value = 12 
JScrollBar's current value = 13 
JScrollBar's current value = 14 
JScrollBar's current value = 15 
JScrollBar's current value = 78 
JScrollBar's current value = 143 
JScrollBar's current value = 78 
JScrollBar's current value = 0 
JScrollBar's current value = 78 
JScrollBar's current value = 143 
BUILD SUCCESSFUL (total time: 10 seconds) 
+0

谢谢mkorbel我已经尝试过,但它不打印System.out.println(“JScrollBar的当前值=”+ scrollBar。的getValue()); – 2012-04-25 12:42:50

+0

@Hemant Metalia请在这里看到我的编辑 – mKorbel 2012-04-25 12:54:52

+0

@Hemant:注意mKorbel必须创建自己的SSCCE才能解决您的问题。下一次,请为他节省麻烦,并在你的问题中创建并发布一个。 1+致mKorbel的努力。 – 2012-04-25 13:00:31

2

如果您尝试在您的JScrollPane中添加setWheelScrollingEnabled(true/false)

+0

我正在使用jscrollbar而不是jscrollpane,正如我在问题中所说的那样.. – 2012-04-27 09:55:14

+0

Ahha,这是混淆的一部分,因为我从来没有直接使用'JScrollBar',因为Java Docs ,总是更倾向于使用'JScrollPane',然后通过它改变'JScrollBar'的行为。 – 2012-04-27 10:05:53