【问题标题】:Not being able to update JCombobox after adding an item in the list在列表中添加项目后无法更新 JCombobox
【发布时间】: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


【解决方案1】:

我能够在其他方法中调用 ObtenerLista() 来解决它,因为它的编码方式 ObtenerLista() 在最开始时只使用过一次。而且列表没有更新

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多