Refresh de Gráficas Dinámicas
Buenas, acabo de afiliarme a este foro y quiero ver si me pueden ayudar; estoy aprendiendo a programar con el libro:
"Java para estudiantes"
Douglas Bell & Mike Parr
sexta edición
editorial: Pearson
El libro desde el comienzo hace uso de la interfaz gráfica y en el capítulo que explica el uso del JSlider, pide como ejercicio, primero, hacer un programa que convierta lo grados celsius que escribe un usuario en un cuadro de texto a farenheit, después, modificar ese código para que lo haga tomando como valor la posición de un JSlider y que el usuario manipule, y finalmente pide que haga lo mismo, pero agregando barras en un área de Graphics.
Lo hice, pero no consigo que las barras de gráficas no disminuyan cuando el JSlider es regresado a su origen, es decir, inicia la aplicación, el JSlider está en 0, incrementa el valor y dibuja las barras correctamente, pero al disminuir el valor de JSlider, las barras se quedan donde están (no se hacen más cortas) y al aumentar aun más el valor las barras vuelven a incrementar y al volver a disminuir JSlider, no decrecen.
Tengo entendido que tengo que volver a dibujar el área Graphics (llamado papel) para cada evento de ChangeListener, y creí haberlo hecho, anexo el código para que el que tenga la disposición le eche un vistazo y me pueda decir qué estoy haciendo mal. Lo agradeceré.
Ya he buscado en otros foros, en la documentación (descargada) del libro, pero no encuentro algo que me ayude a entender qué estoy haciendo mal.
Muchas gracias de antemano.
----------------------------------------------------------------------------------------------------------------
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class CelsiusBarras extends JFrame implements ActionListener, ChangeListener{
private JPanel panel;
private JSlider desliza;
int celsius, farenheit,farfor;
private JLabel etiquetaindica, etiquetaC, etiquetaF;
private JTextField celtex, fartex;
public static void main (String args[]){
CelsiusBarras marco = new CelsiusBarras();
marco.setSize(500, 250);
marco.creaGUI();
marco.setVisible(true);
}//Fin del método main
private void creaGUI(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container ventana = getContentPane();
ventana.setLayout(new FlowLayout());
panel = new JPanel();
panel.setPreferredSize(new Dimension(200,150));
panel.setBackground(Color.white);
ventana.add(panel);
etiquetaC = new JLabel("C: ");
ventana.add(etiquetaC);
celtex = new JTextField(4);
ventana.add(celtex);
etiquetaF = new JLabel("F: ");
ventana.add(etiquetaF);
fartex = new JTextField(4);
ventana.add(fartex);
desliza = new JSlider(JSlider.HORIZONTAL, 0, 200, 0);
ventana.add(desliza);
etiquetaindica = new JLabel("Desliza la barra para ver una gráfica de la relación de las temperaturas");
ventana. add(etiquetaindica);
desliza.addChangeListener(this);
celtex.setText(Integer.toString(desliza.getValue()));
fartex.setText("32");
}//Fin del método creaGUI
public void actionPerformed(ActionEvent event){
fartex.setText(Integer.toString(farfor));
Graphics papel = panel.getGraphics();
papel.setColor(Color.white);
int cel = desliza.getValue();
fartex.setText(Integer.toString(farfor));
}//Fin del método ActionPerformed
public void stateChanged(ChangeEvent e){
int cels = desliza.getValue();
int farfor = (cels*9)/5+32;
celtex.setText(Integer.toString(cels));
fartex.setText(Integer.toString(farfor));
int XCel, YCel, Cellargo, YCelFinal, XFar, YFar, FarLargo, YFarFinal;
Graphics papel = panel.getGraphics();
papel.setColor(Color.white);
XCel = 10;
YCel = 10;
Cellargo = desliza.getValue();
YCelFinal = 10;
XFar = 10;
YFar = 40;
FarLargo = (Cellargo*9)/5+32;
YFarFinal = 10;
papel.setColor(Color.white);
papel.setColor(Color.red);
papel.fillRect(XCel, YCel, Cellargo, YCelFinal);
papel.fillRect(XFar, YFar, FarLargo, YFarFinal);
int cel = desliza.getValue();
fartex.setText(Integer.toString(farfor));
}//Fin del método StateChanged
}//Fin de la clase CelsiusBarras
----------------------------------------------------------------------------------------------------------------------------------------------------------
- Inicie sesión o regístrese para enviar comentarios
Ya lo resolví!
Ya pude hacerlo correctamente, noté que el libro para limpiar el panel (llamado papel) dibujaba un rectángulo relleno con un color blanco, lo hice y ahora sí decrecen las barras, muchas gracias a quien haya querido ayudar :D