Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Duda con JPanel

Buenas, soy nuevo en este foro y quisiera saber si pueden ayudarme con un problema que tengo, cree 3 JPanel con sus respectivas columnas y filas, luego puse los 3 en 3 JFrame, la verdad es una tarea que tengo, apenas estoy aprendiendo a programar y en java soy demasiado novato, todo me esta funcionando sin errores pero, cuando uso el primer Jframe t elijo un boton que puse en el Jpanel, me abre el segundo JFrame, eso esta bien pero quiero que también me cierre el anterior y no he podido hacer que fuke, esa parte es la menos importante.....

La segunda qeu si me preocupa y no he podido arreglar, tampoco se como buscar con palabras exactas en google para hallar una solución y es que el JFrame 3 tiene 2 textFields en los cuales se ingresa un numero de matricula y cantidad de dias, esto es para obtener un precio de alquiler de el vehículo con esa matricula, entonces aparte del JPanel que contiene los txtfield y el Jbutton creé una clase la cual por el método set obtiene los días y el numero de matricula, con esto comprueba si existe o no y dado que sea true, me debería dar el alquiler por medio de un método opreacion que creé en dicha clase, la verdad es que la clase recibe los días y la matricula pero, en las propiedades del botón del JPanel acomodo para que me tire bien el alquiler y siempre me tira el false :(, dejare ambos scripts para ver si me pueden ayudar.

Clase OPrecio
package Interface;

public class OPrecio{
private String matricula;
private int alquiler, dias, pesoM;

public OPrecio(){
}

public boolean operacion(){
if(validar()){
if (matricula == "001" || matricula == "002" || matricula == "003")
alquiler = 123000*dias;
else if (matricula == "004" || matricula == "005" || matricula == "006")
alquiler = 123000*dias+5000;
else if (matricula == "007" || matricula == "008" || matricula == "009")
alquiler = (120000*dias)+(50000*pesoM);
alquiler = 120000*dias+150000;
return true;
}
return false;
}

private boolean validar(){
if (matricula != "001" || matricula != "002" || matricula != "003" || matricula != "004" || matricula != "005" || matricula != "006"
|| matricula != "007" || matricula != "008" || matricula != "009" || matricula != "010" || matricula != "011" || matricula != "012"){
return false;
}
else if (dias <=0){
return false;
}
return true;
}

public void setMatricula(String matricula) {
this.matricula = matricula;
}

public int getAlquiler() {
return alquiler;
}


public void setDias(int dias) {
this.dias = dias;
}
}

Button del JPanel

JButton btnObtener = new JButton("Obtener");
btnObtener.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String matricula;
int dias;
matricula = tfMatricula.getText();
dias = new Integer (tfDias.getText());
OPrecio o = new OPrecio();
o.setMatricula(matricula);
o.setDias(dias);
if(!o.operacion()){
JOptionPane.showMessageDialog(null, "El alquiler es: "+o.getAlquiler());
}
else
JOptionPane.showMessageDialog(null, "Error: la matricula no existe o el numero de días es menor o igual a cero");
}
}

de antemano muchas gracias

mayo 14, 2016 | Registered Commenterdaiverbmx9

Las cadenas debes compararlas así "001".equals(matricula) si lo que quieres es comparar el contenido de la cadena.

mayo 15, 2016 | Registered Commenterchoces

Man pero las que tengo así (matricula == "001") o donde las niego así (matricula != "001")
muchas gracias por tu respuesta

mayo 15, 2016 | Registered Commenterdaiverbmx9

Todas ellas.
Las clases en Java (String es una clase) no se pueden comparar con los operadores == o != para determinar si sus contenidos son idénticos. Esos operadores, aplicados a instancias de una clase, solo comparan los identificadores de las instancias (las referencias de los objetos creados a partir de esas clases).

"001".equals(matricula) // devuelve true si son idénticos
!"001".equals(matricula) // devuelve true si son diferentes

https://docs.oracle.com/javase/tutorial/java/data/comparestrings.html
http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java

mayo 15, 2016 | Registered Commenterchoces

Muchas gracias por tu respuesta amigo, pero igual cambié todo por "001".equals(matricula) y !"001".equals(matricula) y sigue sin mandarme los datos que requiero si copio bien los datos, igual tratare de buscar mas por la web, pensé que era algo parecido a c# xD, pero se que encontrare como :D

mayo 15, 2016 | Registered Commenterdaiverbmx9

Que pena revivir el tema, pero enserio no se que hago mal que no me da el resultado que quiero, pondré el código como lo tengo ya que lo cambie.

Clase llamada AñadirBici, la cual obtiene matricula y tipo, al darle en un botón de un jdialog y valida para retornar me los datos nuevamente o un error.

package IInterface;

import javax.swing.JOptionPane;

public class AñadirBici {
private String matricula, tipo, error;

public AñadirBici(){
matricula = ""; tipo = ""; error = "";
}

public void verdatos(){
if (!"bmx".equals(tipo) || !"bicitaxy".equals(tipo) || !"todoterreno".equals(tipo) || !"competencia".equals(tipo))
JOptionPane.showMessageDialog(null, "Tipo de bicicleta no valido!!");
else
JOptionPane.showMessageDialog(null, "Acabas de agregar los siguientes datos:\n"+"Matricula: "+matricula+"\n"+"Tipo: "+tipo);
}

public String getMatricula() {
return matricula;
}

public void setMatricula(String matricula) {
this.matricula = matricula;
}

public String getTipo() {
return tipo;
}

public void setTipo(String tipo) {
this.tipo = tipo;
}

public String getError() {
return error;
}
}

Luego sigue el jdialog, el cual cuenta con dos textfields, ya nombre sus variables y los dos botones.

package IInterface;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.GridLayout;
import javax.swing.border.TitledBorder;
import java.awt.Color;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Añadir extends JDialog {

private final JPanel contentPanel = new JPanel();
private JTextField tfMatricula;
private JTextField tfTipo;

/**
* Launch the application.
*/
public static void main(String[] args) {
try {
Añadir dialog = new Añadir();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* Create the dialog.
*/
public Añadir() {
setBounds(100, 100, 300, 130);
getContentPane().setLayout(new BorderLayout());
contentPanel.setBorder(new TitledBorder(null, "A\u00F1adir Bicicleta", TitledBorder.LEADING, TitledBorder.TOP, null, Color.BLUE));
getContentPane().add(contentPanel, BorderLayout.CENTER);
contentPanel.setLayout(new GridLayout(3, 3, 5, 5));
{
JLabel lblNewLabel = new JLabel("Matricula");
lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 12));
contentPanel.add(lblNewLabel);
}
{
JLabel lblNewLabel_1 = new JLabel("");
contentPanel.add(lblNewLabel_1);
}
{
tfMatricula = new JTextField();
contentPanel.add(tfMatricula);
tfMatricula.setColumns(10);
}
{
JLabel lblNewLabel_2 = new JLabel("Tipo");
lblNewLabel_2.setFont(new Font("Tahoma", Font.BOLD, 12));
contentPanel.add(lblNewLabel_2);
}
{
JLabel lblNewLabel_3 = new JLabel("");
contentPanel.add(lblNewLabel_3);
}
{
tfTipo = new JTextField();
contentPanel.add(tfTipo);
tfTipo.setColumns(10);
}
{
JLabel lblNewLabel_4 = new JLabel("");
contentPanel.add(lblNewLabel_4);
}
{
JButton btnAñadir = new JButton("A\u00F1adir");
btnAñadir.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String matricula, tipo;
matricula = tfMatricula.getText();
tipo = tfTipo.getText();
AñadirBici aB = new AñadirBici();
aB.setMatricula(matricula);
aB.setTipo(tipo);
aB.verdatos();
}
});
btnAñadir.setFont(new Font("Tahoma", Font.BOLD, 12));
contentPanel.add(btnAñadir);
}
{
JButton btnCancelar = new JButton("Calcelar");
btnCancelar.setFont(new Font("Tahoma", Font.BOLD, 12));
contentPanel.add(btnCancelar);
}
}

}

enserio no se que tiene de malo, siempre me tira el mensaje como si el tipo no existiera, así ponga bmx en la textfield tipo, no logro que me tire lo que necesito, demás que es una bobada, pero no logro acomodarlo, muchas gracias por la atención prestada en este post :D

mayo 15, 2016 | Registered Commenterdaiverbmx9

Que pena, como dije antes es una bobada, ya pueden cerrar este tema, obviamente hice la validación mal xD, ya lo acomode haciendo que si es verdadero bmx etc me mande los datos y si no me de el error, puros errores de novato :D

mayo 15, 2016 | Registered Commenterdaiverbmx9

para cerrar tu jframe seria this.close(); solamente

mayo 30, 2016 | Unregistered CommenterArturo