2012-04-25 50 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