Pergunta

Eu tenho um JSLider que mostra tamanhos de aposta (para um jogo de poker), estou tentando alcançar o efeito de que, quando um clique do mouse ocorre, o controle deslizante é adiante por uma quantidade de aposta (ou seja, uma quantidade cega) em vez de apenas incrementar em um. Se o clique do mouse acontecer à esquerda da barra, eu quero que ela diminua em um aumento da quantidade fixa. Eu olhei para anexar um ouvinte do mouse, mas não sei como posso usar o evento para descobrir de que lado da barra o mouse foi clicado.

Alguma ideia?

Foi útil?

Solução

Você só precisa mudar sua perspectiva sobre o problema.

Não veja os cliques como sendo a 'esquerda' ou 'direita' (abaixo ou acima) da aposta atual.

Em vez disso, você simplesmente armazena o tick antigo e olha o que é o novo carrapato. A diferença informará se o usuário tentou aumentar (delta positivo) ou diminuir (delta negativo).

Em seguida, você pode incrementar com a quantidade desejada de 'aposta fixa' desejada.

Outras dicas

I think you need to write a custom UI for this. This should get you started:

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 );
     }
}

This is how i accomplish the 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
});
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top