Estoy tratando de resolver un proyecto, pero estoy atascado en un problema.
• El programa debe mostrar un menú que permite al usuario realizar las
siguientes operaciones (Nota: el uso GUI):
1. Añadir un nuevo cliente
2. Eliminar un cliente
3. Modificar la información de un cliente // esta opción debe mostrar un submenú como:
-------- 1. Cliente individual // modificar la información básica: teléfono # ...
Código:
//Modify Customer
if (actionEvent.getSource().equals(modifyCustomer)) {
frame.dispose();
frame = new JFrame();
panel = new JPanel();
individualCustomer = new JButton("Individual customer");
individualCustomer.addActionListener(this);
panel.setBorder(BorderFactory.createEmptyBorder(100, 100, 100, 100));
panel.setLayout(new GridLayout(0, 1));
panel.add(individualCustomer);
frame.setTitle("General Distribution Center");
frame.add(panel, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
//Individual Customer
if (actionEvent.getSource().equals(individualCustomer)) {
frame.dispose();
System.out.println("Enter the new phone number: ");
int updatedPhoneNumber = input.nextInt();
}
Mi primer problema es: ¿Por qué si la siguiente afirmación es falsa ??
if (actionEvent.getSource().equals(individualCustomer)) {
Mi segundo problema es: Cuando la sentencia if es cierto .. por ejemplo, si el tipo i
if(true){
frame.dispose();
System.out.println("Enter the new phone number: ");
int updatedPhoneNumber = input.nextInt();
}
Se ejecuta este bloque inmediatamente después de la opción al cliente modifica selecciono. Sin mostrar al cliente la opción / botón individual que he creado aquí:
individualCustomer = new JButton("Individual customer");
individualCustomer.addActionListener(this);
Por favor, si usted no sabe la respuesta y tienen una mejor respuesta lógica para este problema proyecto cuota de ellos y voy a trabajar desde allí.
Tienes una enorme ActionListener, uno que está tratando de hacer demasiadas cosas a la vez. Esa sentencia if-segundo nunca será cierto debido a la manera en que su código está cableada. Usted ha anidadas el caso de tal manera que si el exterior si es cierto (que permite que el interior si a alcanzar), el interior si va siempre ser falsa:
if (actionEvent.getSource().equals(modifyCustomer)) {
// if we're here, then source will **never** be individualCustomer
//..... code here
// the if-test below will **always** be false
if (actionEvent.getSource().equals(individualCustomer)) {
// .... code here
}
}
usted podría hacer si los de en serie:
if (actionEvent.getSource().equals(modifyCustomer)) {
//.....
} else if (actionEvent.getSource().equals(individualCustomer)) {
//.....
}
entonces todo funcionará bien.
Es mejor dar a cada JButton su propio ActionListener interna anónima para separar las preocupaciones
individualCustomer = new JButton("Individual customer");
individualCustomer.addActionListener(() -> {
// button-specific listener code goes here
});
Con respecto a este código:
if(true){
frame.dispose();
System.out.println("Enter the new phone number: ");
int updatedPhoneNumber = input.nextInt();
}
Parece que usted está tratando de mezclar la consola de programación lineal con escáner y println con interfaz gráfica de usuario basada en eventos, y que casi siempre está garantizada a fallar ya que los dos paradigmas no se mezclan bien. Palo con un paradigma, aquí, palo con la obtención de todas las entradas a través de la interfaz gráfica de usuario de una manera orientada a eventos, y eliminar todo el código de escáner basado en System.in.
Una última cosa, por favor, eche un vistazo en el uso de múltiples JFrames, buena / mala práctica?