【发布时间】:2021-12-25 14:16:53
【问题描述】:
我是 Java 和 POO 的新手,所以我正在为这个必须提交给大学的小项目而苦苦挣扎。
我的主要问题是我使用 arraylist 中的属性来填充 JComboBox,但是当我在另一个面板中向该列表中添加另一个对象时,我看不到组合框中的新值。如果我重新运行项目,我只能看到新值。如何在添加值后立即更新 JComboBox。
有人可以就我的问题给我一些建议吗?我知道我的代码一团糟。
public class Registrar_turno extends JPanel {
private JComboBox combomatricula;
private JPanel drop_down;
private JPanel botonera;
private FrameManager manager;
private JLabel Nnombre;
private JTextField nombre;
private JLabel Aapellido;
private JTextField apellido;
private JLabel matricula;
private JButton volver;
private List od_nombres;
private List od_apellidos;
private Object nombre_resultado;
private Object apellido_resultado;
List<Odontologo> listaa = ObtenerLista();
public Registrar_turno(FrameManager manager) {
this.manager = manager;
}
public void Combotest(){
this.setLayout(new BorderLayout());
LayoutManager layout = new SpringLayout();
drop_down = new JPanel();
botonera = new JPanel();
drop_down.setLayout(layout);
Populate_matCombo();
Nnombre = new JLabel("Nombre: ");
nombre = new JTextField(10);
nombre.setEditable(false);
Aapellido = new JLabel("Apellido: ");
apellido = new JTextField(10);
apellido.setEditable(false);
volver= new JButton("Volver");
drop_down.add(Nnombre);
drop_down.add(nombre);
drop_down.add(Aapellido);
drop_down.add(apellido);
botonera.add(volver);
SpringUtilities.makeCompactGrid(drop_down,2,2);
Populate_matCombo();
add(matricula,BorderLayout.PAGE_START);
add(combomatricula,BorderLayout.PAGE_START);
add(drop_down,BorderLayout.CENTER);
add(botonera,BorderLayout.PAGE_END);
volver.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == volver){
manager.ShowMenuZero();
}
}
});
}
public List RellenarCampo_nombre (){
List <String> nombresOD = new ArrayList<String>();
for (Odontologo od : listaa){
nombresOD.add(od.getNombre());
}
return nombresOD;
}
public List RellenarCampo_apellido (){
List <String> apellidosOD= new ArrayList<String>();
for (Odontologo odp : listaa){
apellidosOD.add(odp.getApellido());
}
return apellidosOD;
}
public void Populate_matCombo(){
matricula = new JLabel("Matricula");
List<Integer> o = new ArrayList<Integer>();
combomatricula = new JComboBox();
for (Odontologo od : listaa){
o.add(od.getMatricula());
}
combomatricula.setModel(new DefaultComboBoxModel(o.toArray()));
od_nombres=RellenarCampo_nombre();
od_apellidos=RellenarCampo_apellido();
combomatricula.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == combomatricula){
nombre_resultado=od_nombres.get(combomatricula.getSelectedIndex());
nombre.setText(nombre_resultado.toString());
apellido_resultado=od_apellidos.get(combomatricula.getSelectedIndex());
apellido.setText(apellido_resultado.toString());
}
}
});
}
private List<Odontologo> ObtenerLista() {
OdontologoService odontologoService=new OdontologoService();
return odontologoService.listar();
}
}
所以 uhmm Obtenerlista() 是文件 InputStream
我的 FrameManager 是:
public class FrameManager {
private JFrame frame;
private LoginPanel login;
private ZeroMenu menu0;
private AdminPaciente menu_paciente;
private AdminOdontologo menu_odontologo;
private AltaFormulario paciente_alta;
private AltaOdontologo odontologo_alta;
private Registrar_turno turnero;
public FrameManager (){}
public void GenManager(){
frame= new JFrame();
login = new LoginPanel(this);
menu0= new ZeroMenu(this);
menu_paciente = new AdminPaciente(this);
menu_odontologo = new AdminOdontologo(this);
paciente_alta = new AltaFormulario(this);
odontologo_alta = new AltaOdontologo(this);
turnero = new Registrar_turno(this);
frame.setTitle("");
login.setLoginFormPanel();
menu0.ShowMenu();
menu_paciente.ShowAPaciente();
menu_odontologo.ShowAOdontologo();
paciente_alta.PacienteAltaForm();
odontologo_alta.Odontologo_AltaForm();
turnero.Combotest();
frame.setVisible(true);
}
public void ShowFame(){
frame.setVisible(true);
}
public void ShowMenuZero(){
frame.getContentPane().removeAll();
frame.setBounds(200,200,370,300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(menu0);
frame.getContentPane().validate();
frame.getContentPane().repaint();
turnero.Populate_matCombo();
}
public void PacienteAlta (){
frame.getContentPane().removeAll();
frame.setBounds(200,200,500,450);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(paciente_alta);
frame.getContentPane().validate();
frame.getContentPane().repaint();
}
public void OdontologoAlta(){
frame.getContentPane().removeAll();
frame.setBounds(200,200,500,450);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(odontologo_alta);
frame.getContentPane().validate();
frame.getContentPane().repaint();
}
public void OdontologoAlta(Odontologo o){
frame.getContentPane().removeAll();
odontologo_alta.llenarAltaOdontologo(o);
frame.setBounds(200,200,500,450);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(odontologo_alta);
frame.getContentPane().validate();
frame.getContentPane().repaint();
turnero.revalidate();
}
public void RegistrarTurno (){
frame.getContentPane().removeAll();
frame.setBounds(200,200,500,450);
frame.setLocationRelativeTo(null);
frame.getContentPane().validate();
frame.getContentPane().repaint();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(turnero);
}
}
【问题讨论】:
-
使用数组列表中的属性来填充 JComboBox,但是当我在另一个面板中向该列表中添加另一个对象时,我看不到组合框中的新值。 -摆脱 ArrayList。该对象应添加到组合框的模型中。如果要进行更改,请更改模型,而不是列表。
-
以后,请添加minimal reproducible example,专注于向组合框添加元素的直接问题。此外,请注意使用标准 Java 命名法 - 方法以小写字母开头。
标签: java swing file dao jcombobox