Autor Tema: JAVA programa conversión temperatura grados centígrados a farenheit scrollbar  (Leído 6642 veces)

Serch83

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Buenas este es de mis primeros ejercicios con interfaz grafica en Java.
Se trata de una ventana donde hay un scrollbar y dos cajas de texto, una para la temperatura en grados centígrados y otra para la temperatura en grados farenheit. La idea es que al ir el scrollbar hacia la derecha suban los valores y al ir hacia la izquierda bajen los valores. Pero no consigo hacer que el scrollbar me disminuya las temperaturas, siempre me va aumentado el valor tanto si voy hacia la izquierda como si voy hacia la derecha ¿Alguna sugere a? Gracias!!! ;)

Código: [Seleccionar]
package temperatura;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JTextArea;
import java.awt.SystemColor;
import javax.swing.JTextField;
import javax.swing.JScrollBar;
import javax.swing.JTextPane;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JSlider;
import javax.swing.JEditorPane;
import java.awt.TextField;
import java.awt.Color;
import java.awt.Event;

import javax.swing.JPanel;
import javax.swing.border.CompoundBorder;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.AdjustmentEvent;
import java.awt.Cursor;
import java.awt.ComponentOrientation;

public class temperatura {

private JFrame frmTemperatura;
private JTextField textField_gcent;
private JTextField textField_far;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
temperatura window = new temperatura();
window.frmTemperatura.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the application.
*/
public temperatura() {
initialize();
}
int grados, farenheit,resultado, count,i;
private JScrollBar temperatura;

/**
* Initialize the contents of the frame.
*/
private void initialize() {
frmTemperatura = new JFrame();
frmTemperatura.setTitle("Temperatura");
frmTemperatura.setBounds(100, 100, 451, 366);
frmTemperatura.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



temperatura = new JScrollBar();
temperatura.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
temperatura.setValueIsAdjusting(true);
temperatura.setMinimum(-100);
temperatura.addAdjustmentListener(new AdjustmentListener() {



public void adjustmentValueChanged(AdjustmentEvent arg0) {
textField_gcent.setText(String.valueOf(grados++));

temperatura.getValue();
double farenheit=grados*2-grados/5;
        farenheit=farenheit+32;
        textField_far.setText(String.valueOf(farenheit));
       
     
       
       
}
});
temperatura.addMouseWheelListener(new MouseWheelListener() {
public void mouseWheelMoved(MouseWheelEvent arg0) {
grados = temperatura.getValue();
double farenheit=grados*2-grados/5;
        farenheit=farenheit+32;
}
});
temperatura.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
textField_gcent.setText(String.valueOf(grados));

double farenheit=grados*2-grados/5;
       farenheit=farenheit+32;
       textField_far.setText(String.valueOf(farenheit));
       
       
       
}
});
temperatura.setOrientation(JScrollBar.HORIZONTAL);

JLabel lblMenu = new JLabel("Men\u00FA");

JLabel lbltitulocentigrados = new JLabel("Grados Centigrados");

JLabel lblGradosFah = new JLabel("Grados Fahrenheit");

JPanel panel = new JPanel();
panel.setBorder(new CompoundBorder());

textField_gcent = new JTextField();
textField_gcent.setEnabled(false);
textField_gcent.setEditable(false);
textField_gcent.setBackground(SystemColor.menu);
textField_gcent.setColumns(10);

textField_far = new JTextField();
textField_far.setEnabled(false);
textField_far.setEditable(false);
textField_far.setColumns(10);
textField_far.setBackground(SystemColor.menu);
GroupLayout groupLayout = new GroupLayout(frmTemperatura.getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGap(74)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(lblMenu)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING, false)
.addComponent(temperatura, GroupLayout.PREFERRED_SIZE, 283, GroupLayout.PREFERRED_SIZE)
.addGroup(groupLayout.createSequentialGroup()
.addGap(11)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(lbltitulocentigrados)
.addComponent(textField_gcent, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addPreferredGap(ComponentPlacement.RELATED, 69, Short.MAX_VALUE)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(textField_far, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGap(18)
.addComponent(panel, GroupLayout.PREFERRED_SIZE, 87, GroupLayout.PREFERRED_SIZE))
.addComponent(lblGradosFah, GroupLayout.PREFERRED_SIZE, 222, GroupLayout.PREFERRED_SIZE)))))
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGap(28)
.addComponent(lblMenu)
.addGap(55)
.addComponent(temperatura, GroupLayout.PREFERRED_SIZE, 25, GroupLayout.PREFERRED_SIZE)
.addGap(47)
.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
.addComponent(lbltitulocentigrados)
.addComponent(lblGradosFah))
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGap(32)
.addComponent(panel, GroupLayout.PREFERRED_SIZE, 20, GroupLayout.PREFERRED_SIZE))
.addGroup(groupLayout.createSequentialGroup()
.addGap(18)
.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
.addComponent(textField_gcent, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(textField_far, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))))
.addContainerGap(92, Short.MAX_VALUE))
);
frmTemperatura.getContentPane().setLayout(groupLayout);
}
}
« Última modificación: 03 de Enero 2018, 11:08 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola Serch83, te doy una orientación

Empezamos viendo cómo se llama el objeto JScrollBar, y comprobamos que su nombre es temperatura (nombre que no me gusta demasiado por cierto)

El cambio de los valores de temperatura vemos que se realiza en

public void adjustmentValueChanged(AdjustmentEvent arg0) {
            textField_gcent.setText(String.valueOf(grados++));

Pero siempre hace grados++ lo que significa que siempre hará crecer a la temperatura

Si añadimos esto ya tenemos una pista:

         public void adjustmentValueChanged(AdjustmentEvent arg0) {
             int newValue = temperatura.getValue();
    System.out.println(newValue);

Finalmente hay que tener en cuenta que el código usa la variable grados para almacenar la temperatura, por lo que habremos de meter en esa variable el dato que nos da el scrollbar.

El cambio para que funcione sería simplemente en este fragmento de código:

Código: [Seleccionar]
public void adjustmentValueChanged(AdjustmentEvent arg0) {
   
    grados = temperatura.getValue(); //NUEVO
//textField_gcent.setText(String.valueOf(grados++)); ELIMINADO
textField_gcent.setText(String.valueOf(temperatura.getValue())); //CORREGIDO
temperatura.getValue();
double farenheit=grados*2-grados/5;
        farenheit=farenheit+32;
        textField_far.setText(String.valueOf(farenheit));
}
});

No he comprobado si da resultados correctos ni si el código tiene otros errores o problemas, espero al menos que te sirva de orientación

Saludos

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".