Hola Javafilos X D Bienvenidos a este nuevo aporte!
Normalmente los ProgressBar son usados para mostrar progresos, pues aquí os mostraré como usarlo para setear un valor.
Primero que nada añadimos a nuestra aplicación un JSlider con un tamaño cuyo ancho no importa (ya que es vertical) y en este caso como cambiaremos un valor entre 0 y 100 una altura de 101 Px. (para que cuando es 101 marque 100), valor mínimo de 0, un máximo de 100, orientación vertical y sobreescribimos sus metodos mousePressed, mouseDragged y mouseWheelEvent:
...
progress = new javax.swing.JProgressBar();
progress.setOrientation(1);
progress.addMouseWheelListener(new java.awt.event.MouseWheelListener() {
public void mouseWheelMoved(java.awt.event.MouseWheelEvent evt) {
progressMouseWheelMoved(evt);
}
});
progress.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
progressMousePressed(evt);
}
});
progress.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseDragged(java.awt.event.MouseEvent evt) {
progressMouseDragged(evt);
}
});
getContentPane().add(progress);
progress.setBounds(60, 30, 19, 101);
...
Bien, creamos una variable de tipo int, le llamé valor:
...
int valor;
...
Agregamos además un label que muestra el valor.
En el mousePressed del progress ponemos:
...
private void progressMousePressed(java.awt.event.MouseEvent evt) {
valor = 100 - progress.getMousePosition().y;
progress.setValue(valor);
jLabel1.setText(String.valueOf(valor));
}
...
en el mouseDragged (Capturamos excepción x si salimos de los limites espaciales del progress):
...
private void progressMouseDragged(java.awt.event.MouseEvent evt) {
try {
valor = 100 - progress.getMousePosition().y;
progress.setValue(valor);
} catch (NullPointerException ex) {
}
jLabel1.setText(String.valueOf(valor));
}
...
Y como añadido especial en el mouseWheelMoved:
...
private void progressMouseWheelMoved(java.awt.event.MouseWheelEvent evt) {
if (evt.getWheelRotation() > 0) {
if (valor > 0) {
valor--;
}
progress.setValue(valor);
jLabel1.setText(String.valueOf(valor));
} else {
if (valor < 100) {
valor++;
}
progress.setValue(valor);
jLabel1.setText(String.valueOf(valor));
}
}
...
Podemos hacer también uno horizontal, en el que podemos mostrar el valor en su propia etiqueta (en el vertical se vería de costado, raro no?):
...
progress1 = new javax.swing.JProgressBar();
progress1.setStringPainted(true);
progress1.addMouseWheelListener(new java.awt.event.MouseWheelListener() {
public void mouseWheelMoved(java.awt.event.MouseWheelEvent evt) {
progress1MouseWheelMoved(evt);
}
});
progress1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
progress1MousePressed(evt);
}
});
progress1.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseDragged(java.awt.event.MouseEvent evt) {
progress1MouseDragged(evt);
}
});
getContentPane().add(progress1);
progress1.setBounds(140, 60, 101, 19);
...
int valor1;
...
private void progress1MousePressed(java.awt.event.MouseEvent evt) {
valor1 =progress1.getMousePosition().x;
progress1.setValue(valor1);
progress1.setString(valor1 + "%");
}
private void progress1MouseDragged(java.awt.event.MouseEvent evt) {
try {
valor1 = progress1.getMousePosition().x;
progress1.setValue(valor1);
} catch (NullPointerException ex) {
}
progress1.setString(valor1 + "%");
}
private void progress1MouseWheelMoved(java.awt.event.MouseWheelEvent evt) {
if (evt.getWheelRotation() > 0) {
if (valor1 > 0) {
valor1--;
}
progress1.setValue(valor1);
progress1.setString(valor1 + "%");
} else {
if (valor1 < 100) {
valor1++;
}
progress1.setValue(valor1);
progress1.setString(valor1 + "%");
}
}
...
Et voilá, obtenemos los siguientes resultados:
Aquí dejo una imagen (Tamaño real) de un reproductor en el que estoy trabajando, si miran abajo a la izquierda verán el poco lugar que ocupan los 10 progress que se ocupan de modificar las 10 bandas de ecualización útiles.
Además de ocupar poco espacio, creo que quedan mucho mas lindos y hasta se comportan de manera distinta.
Espero que les sea útil, gracias x la visita y como siempre:
Comentarios, dudas, sugerencias y/o puntos pues Bienvenidos!!!