在列表中添加项目后无法更新JCombobox



我是Java和POO的新手,所以我在这个项目上很吃力,小项目我必须交给大学。

我的主要问题是,我使用arraylist中的atribute来填充JComboBox,但当我在另一个面板中将另一个对象添加到该列表时,我无法在组合框中看到新值。只有重新运行项目,我才能看到新的值。如何在添加值后立即更新JComboBox ass。

有人能就我的问题给我一些建议吗?我知道我的代码一团糟。

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);
}
}

我能够在其他方法中调用ObtenerLista((来解决这个问题,因为它的编码方式ObtenerList((在一开始只使用过一次。没有更新列表

最新更新