我看起来已经解决了如何解决这个问题,但它只发生在我使用多个对象时,我尝试过一个对象和两个String变量,例如我没有得到任何异常,所以idk什么是真正的错误,为什么当尝试从Jlist中删除元素时,它表示值为null。主要代码是
package presentacion;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.SystemColor;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import dominio.Appointment;
import dominio.Patient;
import dominio.Specialist;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.BoxLayout;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
public class Test {
private JFrame a;
private JTabbedPane tabbedPane;
private JMenuBar menuBar;
private JLabel testlabel;
private Appointment citaSara = new Appointment("09:21");
private Appointment citaPaula = new Appointment("10:32");
private Appointment citaRaul = new Appointment("13:12");
private Patient raul = new Patient ("Raul", "Garcia Jimenez", "926781091", "13120", "Porzuna", "Ciudad Real", "Almendros", "3", "630956066", "raul@gmail.com", "18", "Hombre", citaRaul);
private Patient paula = new Patient ("Paula", "Baos Ramiza", "900124392", "13003", "Robledo", "Ciudad Real", "La plaza", "20", "633727281", "paula@hotmail.com", "23", "Mujer", citaPaula);
private Patient sara = new Patient ("Sara", "Jimenez Dorado", "911232292", "13009", "Ciudad Real", "Ciudad Real", "Ceunca", "4", "611627481", "sara@gmail.com", "32", "Mujer", citaSara);
public Test() {
initialize();
a.setVisible(true);
}
public static void main(String[] args) {
try {
// Set System L&F
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
}
catch (UnsupportedLookAndFeelException e) {
// handle exception
}
catch (ClassNotFoundException e) {
// handle exception
}
catch (InstantiationException e) {
// handle exception
}
catch (IllegalAccessException e) {
// handle exception
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Test window = new Test();
window.a.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
private void initialize() {
a = new JFrame();
a.setTitle("Administraci\u00F3n Hospital");
a.setBounds(100, 100, 1195, 710);
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
a.getContentPane().add(panel, BorderLayout.CENTER);
GridBagLayout gbl_panel = new GridBagLayout();
gbl_panel.columnWidths = new int[]{194, 0, 50, 0};
gbl_panel.rowHeights = new int[]{1, 0, 0};
gbl_panel.columnWeights = new double[]{0.0, 0.0, 0.0, Double.MIN_VALUE};
gbl_panel.rowWeights = new double[]{1.0, 0.0, Double.MIN_VALUE};
panel.setLayout(gbl_panel);
DefaultListModel<String> modelPacientes = new DefaultListModel<>();
JList <String> list = new JList<>( modelPacientes );
GridBagConstraints gbc_list = new GridBagConstraints();
gbc_list.insets = new Insets(0, 0, 5, 5);
gbc_list.fill = GridBagConstraints.BOTH;
gbc_list.gridx = 0;
gbc_list.gridy = 0;
panel.add(list, gbc_list);
modelPacientes.addElement(raul.getName());
modelPacientes.addElement(paula.getName());
modelPacientes.addElement(sara.getName());
list.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent arg0) {
setPacientesInfo(list.getSelectedValue());
}
});
JButton btnDelete = new JButton("DELETE");
btnDelete.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DefaultListModel model = (DefaultListModel) list.getModel();
int selectedIndex = list.getSelectedIndex();
int borrar = JOptionPane.showConfirmDialog(null, "Si borra a este paciente no se podrá recuperar, ¿continuar?", "Borrar",
JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
if (borrar == JOptionPane.YES_OPTION && list.getSelectedIndex() != -1) {
model.remove(selectedIndex);
}
}
});
GridBagConstraints gbc_btnDelete = new GridBagConstraints();
gbc_btnDelete.insets = new Insets(0, 0, 5, 5);
gbc_btnDelete.gridx = 1;
gbc_btnDelete.gridy = 0;
panel.add(btnDelete, gbc_btnDelete);
testlabel = new JLabel("");
GridBagConstraints gbc_testlabel = new GridBagConstraints();
gbc_testlabel.insets = new Insets(0, 0, 5, 0);
gbc_testlabel.gridx = 2;
gbc_testlabel.gridy = 0;
panel.add(testlabel, gbc_testlabel);
}
private void setPacientesInfo(String value){
testlabel.setVisible(true);
if (value.indexOf("Sara") != -1){
testlabel.setText(sara.getName());
} else if (value.indexOf("Paula") != -1){
testlabel.setText(paula.getName());
} else if (value.indexOf("Raul") != -1){
testlabel.setText(raul.getName());
}
}
}
患者和apointment课程的代码是:
package dominio;
public class Appointment {
private String time;
public Appointment(String time) {
this.time = time;
}
}
和
package dominio;
public class Patient extends Person{
private String age;
private String genre;
private String mobilePhone;
private String email;
private Appointment appointment;
public Patient(String name, String surname, String phoneNumber, String zipCode, String town, String province,
String street, String houseNumber, String mobilePhone, String email, String age, String genre, Appointment appointment) {
super(name, surname, phoneNumber, zipCode, town, province, street, houseNumber);
this.age = age;
this.genre = genre;
this.mobilePhone = mobilePhone;
this.email = email;
this.appointment = appointment;
}
}
与父类
package dominio;
public class Person {
private String name;
private String surname;
private String phoneNumber;
private String zipCode;
private String town;
private String province;
private String street;
private String houseNumber;
public Person(String name, String surname, String phoneNumber, String zipCode, String town, String province, String street, String houseNumber){
this.name = name;
this.surname = surname;
this.phoneNumber = phoneNumber;
this.zipCode = zipCode;
this.town = town;
this.province = province;
this.street = street;
this.houseNumber = houseNumber;
}
public String getName() {
return name;
}
}
为什么我会得到那个例外?我该怎么办呢?如果不使用对象,它可以很好地工作。
修改。添加了我忘记的例外代码。
异常代码:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at presentacion.Test.setPacientesInfo(Test.java:162)
at presentacion.Test.access$1(Test.java:159)
at presentacion.Test$2.valueChanged(Test.java:122)
at javax.swing.JList.fireSelectionValueChanged(Unknown Source)
at javax.swing.JList$ListSelectionHandler.valueChanged(Unknown Source)
at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
at javax.swing.DefaultListSelectionModel.removeIndexInterval(Unknown Source)
at javax.swing.plaf.basic.BasicListUI$Handler.intervalRemoved(Unknown Source)
at javax.swing.AbstractListModel.fireIntervalRemoved(Unknown Source)
at javax.swing.DefaultListModel.remove(Unknown Source)
at presentacion.Test$3.actionPerformed(Test.java:139)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
由于
答案 0 :(得分:2)
解决问题的真正简单方法是在null
中添加setPacientesInfo(...)
支票。例如
private void setPacientesInfo(String value){
testlabel.setVisible(true);
if(value != null) {
if (value.indexOf("Sara") != -1){
testlabel.setText(sara.getName());
} else if (value.indexOf("Paula") != -1){
testlabel.setText(paula.getName());
} else if (value.indexOf("Raul") != -1){
testlabel.setText(raul.getName());
}
} else
testlabel.setText("");
}
<强>解释强>
您需要执行此操作的原因是,当您从JList
移除值时,JList
模型中的值已更改,您不再选择任何内容。这意味着value
的值将为null
,因为您没有选择任何内容。