2010-03-08 1 views
1

У меня есть JSlider, который показывает размеры ставок (для игры в покер). Я пытаюсь добиться эффекта, когда при щелчке мыши слайдер переходит вперед на сумму ставки (т. Е. большая сумма блайндов), а не просто увеличивать на единицу. Если щелчок мыши происходит слева от панели, я хочу, чтобы он уменьшался на фиксированное количество приращений. Я заглянул в приставку слушателя мыши, но не знаю, как я могу использовать это событие, чтобы узнать, на какой стороне панели была нажата мышь.Получение JSlider-бара для перемещения по событию мыши

Любые идеи?

ответ

4

Вам просто нужно изменить свою точку зрения на проблему.

Не просматривайте клики как «левую» или «правую» (ниже или выше) текущую ставку.

Скорее всего, вы просто храните старый тик и смотрите, что нового. Разница скажет вам, попытался ли пользователь увеличить (положительная дельта) или уменьшить (отрицательная дельта).

Затем вы можете увеличить свою желаемую сумму с фиксированной ставкой.

2

Я думаю, вам нужно написать пользовательский интерфейс для этого. Вам должно быть начато:

import java.awt.*; 
import javax.swing.*; 
import javax.swing.plaf.basic.*; 
import javax.swing.plaf.metal.*; 

public class SliderScroll extends JFrame 
{ 
    public SliderScroll() 
    { 
     final JSlider slider = new JSlider(0, 50, 20); 
     slider.setMajorTickSpacing(10); 
     slider.setMinorTickSpacing(5); 
     slider.setExtent(5); 
     slider.setPaintTicks(true); 
     slider.setPaintLabels(true); 
     getContentPane().add(slider); 

     slider.setUI(new MySliderUI()); 
    } 

    class MySliderUI extends MetalSliderUI 
    { 
     public void scrollByUnit(int direction) 
     { 
      synchronized(slider) 
      { 
       int oldValue = slider.getValue(); 
       int delta = (direction > 0) ? 10 : -5; 
       slider.setValue(oldValue + delta); 
      } 
     } 
    } 

    public static void main(String[] args) 
    { 
     JFrame frame = new SliderScroll(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 
+1

пользовательские интерфейсы не очень хорошо, если вы хотите, чтобы иметь возможность использовать вашу программу на различных операционных системах (или версии операционки) с их по умолчанию look'n'feel – Fortega

+0

Согласился, и поэтому я отказался от Metal LAF. Это дает плакату возможность выбора. Мы не можем предположить, что требование заключается в использовании «платформы» LAF. – camickr

1

Это, как я MouseClickEvent выполнить

MoveSlider = new JSlider(JSlider.HORIZONTAL, 0, 0, 0); 
MoveSlider.addMouseListener(new MouseListener() 
{ 
     public void mousePressed(MouseEvent event) { 
      //Mouse Pressed Functionality add here 
       } 

     @Override 
     public void mouseClicked(MouseEvent arg0) { 
       // TODO Auto-generated method stub 
      } 
     @Override 
     public void mouseEntered(MouseEvent arg0) { 
      // TODO Auto-generated method stub 
      } 
     @Override 
     public void mouseExited(MouseEvent arg0) { 
      // TODO Auto-generated method stub 
      } 

     @Override 
     public void mouseReleased(MouseEvent arg0) { 
      // TODO Auto-generated method stub 
}); 
Смежные вопросы