Pregunta

Tengo un JSLider que muestra tamaños de apuesta (para un juego de póker), estoy tratando de lograr el efecto de que cuando se produce un clic del mouse, el control deslizante salta hacia adelante por una cantidad de apuesta (es decir, una gran cantidad a ciegas) en lugar de solo incrementar por uno. Si el clic del mouse ocurre a la izquierda de la barra, quiero que disminuya por un incremento de otra cantidad fija. Busqué adjuntar un oyente del mouse, pero no sé cómo puedo usar el evento para averiguar en qué lado de la barra se hizo clic en el mouse.

¿Algunas ideas?

¿Fue útil?

Solución

Solo necesita cambiar su perspectiva sobre el problema.

No vea los clics como la "izquierda" o "derecha" (abajo o arriba) la apuesta actual.

Por el contrario, simplemente almacena la vieja garrapata y mira cuál es la nueva marca. La diferencia le dirá si el usuario ha intentado aumentar (delta positivo) o disminuir (delta negativa).

Luego puede incrementar por su cantidad deseada de 'apuesta fija'.

Otros consejos

Creo que necesitas escribir una interfaz de usuario personalizada para esto. Esto debería hacer que comiences:

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

Así es como logro el 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top