заставить JSlider bar двигаться по событию щелчка мышью - PullRequest
1 голос
/ 08 марта 2010

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

Есть идеи?

Ответы [ 3 ]

4 голосов
/ 08 марта 2010

Вам просто нужно изменить свой взгляд на проблему.

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

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

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

2 голосов
/ 08 марта 2010

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

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 голос
/ 23 сентября 2013

Вот как я выполняю 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
});
...