Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Serch83 en 28 de Octubre 2017, 08:47
-
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!!! ;)
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);
}
}
-
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:
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