Update Combobox receiving a list from another panel

Asked

Viewed 796 times

3

I have a screen where I register a film, and I play for a ArrayList with a Movie class, which contains some attributes such as title, year, nothing else so far.

So I want in my other screen where I have a combobox called "Select the movie", it is possible to select all registered movies, but what happens is that this combobox does not update, as it comes set when starting the program it gets.

I saw some things on forums about the "revalidate()" and "replace" methods, but it didn’t work.

In the matter of table is the same thing, list added movies on another screen.

Follow the full code with basic features to test:

Screen = windows application

package tela;

import java.awt.EventQueue;

import javax.swing.JFrame;
import java.awt.CardLayout;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import java.awt.Font;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.awt.event.ActionEvent;
import java.awt.Color;
import javax.swing.JTextPane;
import java.awt.Cursor;
import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;

public class Exemplo {

private JFrame frmHappyCine;
private JPanel t2_menuInicial;
private JPanel t4_realizarVendas;
@SuppressWarnings({ "rawtypes", "unused" })
private JComboBox comboBox;
private JButton btnVoltarMenu;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Exemplo window = new Exemplo();
                window.frmHappyCine.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public Exemplo() {
    initialize();
}

String pass = "Palmeirense";
String name = "Tiago Saldanha";
private JComboBox comboBoxSelecionarFilme;
private JButton btnVendas;
private JTextField textField;
private JTextField textField_1;
private JTextField textField_2;
private JPanel t5_cadastroFilme;
private JTextField textNomeFilme;
private JTextPane textFieldDescricao;
private JTextField textFieldAno;
private JComboBox comboFaixaEtaria;
private JTextPane textFieldAtores;
private JTextField textFieldDuracao;

/**
 * Initialize the contents of the frame.
 */
@SuppressWarnings({ "rawtypes", "unchecked" })
private void initialize() { 

    Filme filme = new Filme();

    ArrayList<Filme> filmeArray = new ArrayList<Filme>();


    frmHappyCine = new JFrame();
    frmHappyCine.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
    frmHappyCine.setTitle("Happy Cine");
    frmHappyCine.getContentPane().setBackground(new Color(255, 255, 255));
    frmHappyCine.setBounds(350, 100, 700, 600);
    frmHappyCine.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frmHappyCine.getContentPane().setLayout(new CardLayout(0, 0));

    t2_menuInicial = new JPanel();
    frmHappyCine.getContentPane().add(t2_menuInicial, "name_813525675668965");
    t2_menuInicial.setLayout(null);

    JLabel lblmenuInicial = new JLabel("Menu inicial");
    lblmenuInicial.setFont(new Font("Tahoma", Font.PLAIN, 18));
    lblmenuInicial.setBounds(288, 146, 108, 14);
    t2_menuInicial.add(lblmenuInicial);

    btnVendas = new JButton("Realizar Vendas");
    btnVendas.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            t2_menuInicial.setVisible(false);
            t4_realizarVendas.setVisible(true);
        }
    });
    btnVendas.setBounds(235, 199, 213, 23);
    t2_menuInicial.add(btnVendas);

    JButton btnNewButton = new JButton("Cadastrar Filme");
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            t2_menuInicial.setVisible(false);
            t5_cadastroFilme.setVisible(true);
        }
    });
    btnNewButton.setBounds(235, 243, 213, 23);
    t2_menuInicial.add(btnNewButton);

    t4_realizarVendas = new JPanel();
    t4_realizarVendas.repaint();
    frmHappyCine.getContentPane().add(t4_realizarVendas, "name_1417798624613276");
    t4_realizarVendas.setLayout(null);

    JLabel lblVendas = new JLabel("Venda de Ingressos");
    lblVendas.setFont(new Font("Tahoma", Font.PLAIN, 18));
    lblVendas.setBounds(259, 11, 165, 23);
    t4_realizarVendas.add(lblVendas);

    JLabel lblTituloDoFilme = new JLabel("T\u00EDtulo do Filme");
    lblTituloDoFilme.setFont(new Font("Tahoma", Font.PLAIN, 14));
    lblTituloDoFilme.setBounds(21, 105, 159, 23);
    t4_realizarVendas.add(lblTituloDoFilme);

    btnVoltarMenu = new JButton("Voltar");
    btnVoltarMenu.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent a) {
            t4_realizarVendas.setVisible(false);
            t2_menuInicial.setVisible(true);
        }
    });
    btnVoltarMenu.setForeground(Color.RED);
    btnVoltarMenu.setBounds(585, 527, 89, 23);
    t4_realizarVendas.add(btnVoltarMenu);

    comboBoxSelecionarFilme = new JComboBox();
    comboBoxSelecionarFilme.setToolTipText("Selecione o filme");
    comboBoxSelecionarFilme.setFont(new Font("Tahoma", Font.PLAIN, 14));


    String[] stringFilme = new String[filmeArray.size()];
    filmeArray.toArray(stringFilme);
    for (int i = 0; i < filmeArray.size(); i++) {
        stringFilme[i] = filmeArray.get(i).getTitulo();
        System.out.println(filmeArray.get(i).getTitulo());
    }

    comboBoxSelecionarFilme.setModel(new DefaultComboBoxModel(stringFilme));
    comboBoxSelecionarFilme.setBounds(205, 105, 436, 23);
    t4_realizarVendas.add(comboBoxSelecionarFilme);

    t5_cadastroFilme = new JPanel();
    frmHappyCine.getContentPane().add(t5_cadastroFilme, "name_813525692590336");
    t5_cadastroFilme.setLayout(null);

    JLabel nomeMenuCadastro = new JLabel("Cadastro de Filme");
    nomeMenuCadastro.setFont(new Font("Tahoma", Font.PLAIN, 18));
    nomeMenuCadastro.setBounds(267, 11, 150, 23);
    t5_cadastroFilme.add(nomeMenuCadastro);

    textNomeFilme = new JTextField();
    textNomeFilme.setBounds(48, 140, 319, 23);
    t5_cadastroFilme.add(textNomeFilme);
    textNomeFilme.setColumns(10);

    JLabel nomeFilme = new JLabel("Titulo");
    nomeFilme.setFont(new Font("Tahoma", Font.PLAIN, 14));
    nomeFilme.setBounds(48, 115, 319, 14);
    t5_cadastroFilme.add(nomeFilme);

    JLabel generoFilme = new JLabel("Descri\u00E7\u00E3o");
    generoFilme.setFont(new Font("Tahoma", Font.PLAIN, 14));
    generoFilme.setBounds(48, 174, 319, 14);
    t5_cadastroFilme.add(generoFilme);

    JLabel anoFilme = new JLabel("Ano");
    anoFilme.setFont(new Font("Tahoma", Font.PLAIN, 14));
    anoFilme.setBounds(413, 115, 86, 14);
    t5_cadastroFilme.add(anoFilme);

    textFieldAno = new JTextField();
    textFieldAno.setColumns(10);
    textFieldAno.setBounds(413, 140, 86, 23);
    t5_cadastroFilme.add(textFieldAno);

    JLabel ator_principalFilme = new JLabel("Atores Principais");
    ator_principalFilme.setFont(new Font("Tahoma", Font.PLAIN, 14));
    ator_principalFilme.setBounds(48, 308, 319, 14);
    t5_cadastroFilme.add(ator_principalFilme);


    JButton btnSalvarFilme = new JButton("Salvar");
    btnSalvarFilme.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            String retorno = "";
            if (textNomeFilme.getText().equals(""))
            {
                retorno += "\n Informe um nome para o filme.";
            }
            if (textFieldAno.getText().equals(""))
            {
                retorno +=  "\n Informe um ano para o filme.";
            }
            if (textFieldDescricao.getText().equals(""))
            {
                retorno += "\n Informe uma descrição para o filme.";
            }
            if (textFieldAtores.getText().equals(""))
            {
                retorno += "\n Informe atores principais para o filme.";
            }
            if (textFieldDuracao.getText().equals(""))
            {
                retorno += "\n Informe uma duração em minutos para o filme.";
            }

            if (retorno != "")
            {
                JOptionPane.showMessageDialog(null, retorno);
            }
            else
            {
                filme.setTitulo(textNomeFilme.getText());
                filme.setAno(textFieldAno.getText());
                filme.setDescricao(textFieldDescricao.getText());
                filme.setFaixaEtaria(comboFaixaEtaria.getSelectedItem().toString());
                filme.setAtoresPrincipais(textFieldAtores.getText());

                try{
                    filme.setDuracaoMinutos(Double.parseDouble(textFieldDuracao.getText()));
                }catch(Exception descricao){
                    String msg = "A duração em minutos do filme não pode conter letras ou caracters especiais!"; 
                    JOptionPane.showMessageDialog(btnSalvarFilme, msg);
                }

                filmeArray.add(filme);
                JOptionPane.showMessageDialog(null, "Filme salvo com sucesso!");
                textNomeFilme.setText(null);
                textFieldAno.setText(null);
                textFieldDescricao.setText(null);
                textFieldAtores.setText(null);
                textFieldDuracao.setText(null);
            }
        }
    });

    btnSalvarFilme.setForeground(new Color(0, 102, 0));
    btnSalvarFilme.setBounds(585, 11, 89, 23);
    t5_cadastroFilme.add(btnSalvarFilme);

    JLabel lblNewLabel = new JLabel("Para cadastrar atores insira uma v\u00EDrgula entre cada nome.");
    lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 11));
    lblNewLabel.setForeground(new Color(255, 0, 0));
    lblNewLabel.setBounds(48, 398, 369, 14);
    t5_cadastroFilme.add(lblNewLabel);

    JLabel lblFaixa = new JLabel("Faixa et\u00E1ria");
    lblFaixa.setFont(new Font("Tahoma", Font.PLAIN, 14));
    lblFaixa.setBounds(413, 176, 86, 14);
    t5_cadastroFilme.add(lblFaixa);

    JLabel lblDuraoEmMinutos = new JLabel("Dura\u00E7\u00E3o em minutos");
    lblDuraoEmMinutos.setFont(new Font("Tahoma", Font.PLAIN, 14));
    lblDuraoEmMinutos.setBounds(413, 304, 143, 23);
    t5_cadastroFilme.add(lblDuraoEmMinutos);

    textFieldDuracao = new JTextField();
    textFieldDuracao.setColumns(10);
    textFieldDuracao.setBounds(413, 333, 86, 23);
    t5_cadastroFilme.add(textFieldDuracao);

    JButton btnVoltar_1 = new JButton("Voltar");
    btnVoltar_1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            t5_cadastroFilme.setVisible(false);
            t2_menuInicial.setVisible(true);
        }
    });
    btnVoltar_1.setForeground(Color.BLACK);
    btnVoltar_1.setBounds(585, 527, 89, 23);
    t5_cadastroFilme.add(btnVoltar_1);

    textFieldDescricao = new JTextPane();
    textFieldDescricao.setBounds(48, 199, 319, 98);
    t5_cadastroFilme.add(textFieldDescricao);

    textFieldAtores = new JTextPane();
    textFieldAtores.setBounds(48, 333, 319, 54);
    t5_cadastroFilme.add(textFieldAtores);

    comboFaixaEtaria = new JComboBox();
    comboFaixaEtaria.setModel(new DefaultComboBoxModel(new String[] {"Selecione", "12", "14", "16", "18"}));
    comboFaixaEtaria.setSelectedIndex(0);
    comboFaixaEtaria.setBounds(413, 202, 86, 20);
    t5_cadastroFilme.add(comboFaixaEtaria);

    JComboBox comboBoxFaixa = new JComboBox();
    comboBoxFaixa.setModel(new DefaultComboBoxModel(new String[] {"Selecione", "Livre", "12 Anos", "14 Anos", "16 Anos", "18 Anos"}));
    comboBoxFaixa.setSelectedIndex(0);
    comboBoxFaixa.setBounds(413, 201, 86, 20);
    t5_cadastroFilme.add(comboBoxFaixa);

    }
}

Film class:

package tela;

public class Filme {

private String titulo;
private String ano;
private String descricao;
private String faixaEtaria;
private String atoresPrincipais;
private double duracaoMinutos;


public String getTitulo() {
    return titulo;
}
public void setTitulo(String titulo) {
    this.titulo = titulo;
}
public String getAno() {
    return ano;
}
public void setAno(String ano) {
    this.ano = ano;
}
public String getDescricao() {
    return descricao;
}
public void setDescricao(String descricao) {
    this.descricao = descricao;
}
public String getFaixaEtaria() {
    return faixaEtaria;
}
public void setFaixaEtaria(String faixaEtaria) {
    this.faixaEtaria = faixaEtaria;
}
public String getAtoresPrincipais() {
    return atoresPrincipais;
}
public void setAtoresPrincipais(String atoresPrincipais) {
    this.atoresPrincipais = atoresPrincipais;
}
public double getDuracaoMinutos() {
    return duracaoMinutos;
}
public void setDuracaoMinutos(double duracaoMinutos) {
    this.duracaoMinutos = duracaoMinutos;
}


}
  • Welcome to SOPT. Please add one [mcve] of your code, so it is possible to test and reproduce the problem.

  • From what I’m seeing, it’s very likely that you’ll need to create a ComboBoxModel for the object Film. At this link there is an example very similar to your.

  • @diegofm Altered, I’m looking at the example you indicated, thanks :)

  • I suggest that, even for organization issues, you separate these panels into separate classes. This facilitates code maintenance. The fact that you have done everything within just one method is the major cause of the problem. The screen is all loaded in the opening, so it is no use to add more movie, because the combo of the other screen has already been loaded with the empty list.

  • I’ll redo it like you suggested then, thanks!

  • Another tip, remove this "back" button inside the components. It will work better inside the main frame, so you control its display when the initial panel is visible or not.

  • I’ve never done it this way, but I’m going to do some research, thanks for the tips. :)

  • You can close the topic, in case I can’t, I’ll create a again kkk

  • There is not much secret, just create classes type MenuInicialPainel, RealizarVendasPainel and CadastrarFilmePainel and drag all the components of each panel and their methods there. Another alternative is to use Jinternalframe, where each panel would turn an internal Frame within the Jframe, would make it much easier to control the visibility of each one.

  • I even tried to separate their panels into different classes, but as the number of components is very extensive, I ended up not giving continuity. The idea is to create classes of each screen extending Jpanel, I will try to adapt your code and I command here.

  • If you can help then through the chat thank you!

  • See my answer below.

Show 7 more comments

2 answers

3


The way the code was, any adaptation would be complicated. I separated the panels into different classes and to solve the combo problem without changing the structure of your code, I implemented a Listener in the Panel where the combo was, so that it will be invoked whenever the panel is configured as visible (through the method setVisible()) and will update the combo model with the list again, due to a particularity in the behavior of ArrayList, being passed as a parameter of the main class to the other panel classes.

The code went like this:

Example class is now cleaner:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;

public class Exemplo {

    private JFrame frmHappyCine;
    private JPanel t2_menuInicial;
    @SuppressWarnings({"rawtypes", "unused"})

    String pass = "Palmeirense";
    String name = "Tiago Saldanha";
    private JComboBox comboBox;
    private JButton btnVendas;
    private JTextField textField;
    private JTextField textField_1;
    private JTextField textField_2;
    //transformei a lista em atributo para poder usá-la
    //como parametro dos paineis        
    private ArrayList<Filme> filmeArray = new ArrayList<>();
    //criei dois atributos para representar os paineis
    private CadastroFilmePainel filmePanel;
    private RealizarVendasPainel vendasPanel;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    Exemplo window = new Exemplo();
                    window.frmHappyCine.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public Exemplo() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    @SuppressWarnings({"rawtypes", "unchecked"})
    private void initialize() {

        frmHappyCine = new JFrame();
        frmHappyCine.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        frmHappyCine.setTitle("Happy Cine");
        frmHappyCine.getContentPane().setBackground(new Color(255, 255, 255));
        frmHappyCine.setBounds(350, 100, 700, 600);
        frmHappyCine.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frmHappyCine.getContentPane().setLayout(new CardLayout(0, 0));

        t2_menuInicial = new JPanel();
        frmHappyCine.getContentPane().add(t2_menuInicial, "name_813525675668965");
        t2_menuInicial.setLayout(null);

        JLabel lblmenuInicial = new JLabel("Menu inicial");
        lblmenuInicial.setFont(new Font("Tahoma", Font.PLAIN, 18));
        lblmenuInicial.setBounds(288, 146, 108, 14);
        t2_menuInicial.add(lblmenuInicial);

        btnVendas = new JButton("Realizar Vendas");
        btnVendas.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                t2_menuInicial.setVisible(false);
                //vendasPanel é uma instancia do painel de realizar vendas
                vendasPanel.revalidate();
                vendasPanel.setVisible(true);
            }
        });
        btnVendas.setBounds(235, 199, 213, 23);
        t2_menuInicial.add(btnVendas);

        JButton btnNewButton = new JButton("Cadastrar Filme");
        btnNewButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                t2_menuInicial.setVisible(false);
                //filmePanel é uma instancia do painel de cadastrar filmes
                filmePanel.setVisible(true);
            }
        });
        btnNewButton.setBounds(235, 243, 213, 23);
        t2_menuInicial.add(btnNewButton);
        //adiciona o painel de vendas a tela principal
        vendasPanel = new RealizarVendasPainel(filmeArray);
        frmHappyCine.getContentPane().add(vendasPanel, "name_1417798624613276");
        //adiciona o painel de filmes a tela principal
        filmePanel = new CadastroFilmePainel(filmeArray);
        frmHappyCine.getContentPane().add(filmePanel, "name_813525692590336");

    }
}

Thanks to the separations I’ve already mentioned in the comments, we now have two new classes for each specific panel of the program:

Realizing Sales Panel (where the JComboBox):

import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;

public class RealizarVendasPainel extends JPanel {

    private JButton btnVoltarMenu;
    private JComboBox comboBoxSelecionarFilme;
    ArrayList<Filme> filmeArray;

    public RealizarVendasPainel(ArrayList listaFilmes) {
        //recebe a lista de filmes da tela principal
        this.filmeArray = listaFilmes;
        initComponents();
        //adiciona um listener para monitorar 
        //quando o painel for setado como visivel
        //e atualizar o combo de filmes
        addComponentListener(new ComponentAdapter() {
            @Override
            public void componentShown(ComponentEvent e) {
                super.componentShown(e);
                //atualiza o combo de filmes
                comboBoxSelecionarFilme.setModel(new DefaultComboBoxModel(getListModel()));
            }

        });
    }

    private void initComponents() {

        this.setLayout(null);

        JLabel lblVendas = new JLabel("Venda de Ingressos");
        lblVendas.setFont(new Font("Tahoma", Font.PLAIN, 18));
        lblVendas.setBounds(259, 11, 165, 23);
        this.add(lblVendas);

        JLabel lblTituloDoFilme = new JLabel("T\u00EDtulo do Filme");
        lblTituloDoFilme.setFont(new Font("Tahoma", Font.PLAIN, 14));
        lblTituloDoFilme.setBounds(21, 105, 159, 23);
        this.add(lblTituloDoFilme);

        btnVoltarMenu = new JButton("Voltar");
        btnVoltarMenu.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent a) {
                setVisible(false);
            }
        });
        btnVoltarMenu.setForeground(Color.RED);
        btnVoltarMenu.setBounds(585, 527, 89, 23);
        this.add(btnVoltarMenu);

        comboBoxSelecionarFilme = new JComboBox();
        comboBoxSelecionarFilme.setToolTipText("Selecione o filme");
        comboBoxSelecionarFilme.setFont(new Font("Tahoma", Font.PLAIN, 14));

        comboBoxSelecionarFilme.setBounds(205, 105, 436, 23);
        comboBoxSelecionarFilme.setModel(new DefaultComboBoxModel(getListModel()));
        this.add(comboBoxSelecionarFilme);
    }

    /**
     * Método que irá converter o arraylist de filmes
     * em um vetor de strings
     * 
     * @return vetor de strings com o nome dos filmes
     */
    private String[] getListModel() {
        String[] stringFilme = new String[filmeArray.size()];

        for (int i = 0; i < filmeArray.size(); i++) {
            stringFilme[i] = filmeArray.get(i).getTitulo();
            System.out.println(filmeArray.get(i).getTitulo());
        }
        return stringFilme;
    }
}

Panel of Film Registration:

import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;

public class CadastroFilmePainel extends JPanel {

    private JTextField textNomeFilme;
    private JTextField textFieldAno;
    private JTextPane textFieldDescricao;
    private JTextPane textFieldAtores;
    private JTextField textFieldDuracao;
    private JComboBox comboFaixaEtaria;
    private Filme filme;
    ArrayList<Filme> filmeArray;

    public CadastroFilmePainel(ArrayList<Filme> listaFilmes) {
        //recebe a lista de filmes do Frame
        this.filmeArray = listaFilmes;
        initComponents();
    }

    private void initComponents() {

        this.setLayout(null);

        JLabel nomeMenuCadastro = new JLabel("Cadastro de Filme");
        nomeMenuCadastro.setFont(new Font("Tahoma", Font.PLAIN, 18));
        nomeMenuCadastro.setBounds(267, 11, 150, 23);
        this.add(nomeMenuCadastro);

        textNomeFilme = new JTextField();
        textNomeFilme.setBounds(48, 140, 319, 23);
        this.add(textNomeFilme);
        textNomeFilme.setColumns(10);

        JLabel nomeFilme = new JLabel("Titulo");
        nomeFilme.setFont(new Font("Tahoma", Font.PLAIN, 14));
        nomeFilme.setBounds(48, 115, 319, 14);
        this.add(nomeFilme);

        JLabel generoFilme = new JLabel("Descri\u00E7\u00E3o");
        generoFilme.setFont(new Font("Tahoma", Font.PLAIN, 14));
        generoFilme.setBounds(48, 174, 319, 14);
        this.add(generoFilme);

        JLabel anoFilme = new JLabel("Ano");
        anoFilme.setFont(new Font("Tahoma", Font.PLAIN, 14));
        anoFilme.setBounds(413, 115, 86, 14);
        this.add(anoFilme);

        textFieldAno = new JTextField();
        textFieldAno.setColumns(10);
        textFieldAno.setBounds(413, 140, 86, 23);
        this.add(textFieldAno);

        JLabel ator_principalFilme = new JLabel("Atores Principais");
        ator_principalFilme.setFont(new Font("Tahoma", Font.PLAIN, 14));
        ator_principalFilme.setBounds(48, 308, 319, 14);
        this.add(ator_principalFilme);

        JButton btnSalvarFilme = new JButton("Salvar");
        btnSalvarFilme.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                String retorno = "";
                if (textNomeFilme.getText().equals("")) {
                    retorno += "\n Informe um nome para o filme.";
                } else if (textFieldAno.getText().equals("")) {
                    retorno += "\n Informe um ano para o filme.";
                } else if (textFieldDescricao.getText().equals("")) {
                    retorno += "\n Informe uma descrição para o filme.";
                } else if (textFieldAtores.getText().equals("")) {
                    retorno += "\n Informe atores principais para o filme.";
                } else if (textFieldDuracao.getText().equals("")) {
                    retorno += "\n Informe uma duração em minutos para o filme.";
                }

                if (!"".equals(retorno)) {
                    JOptionPane.showMessageDialog(null, retorno);
                } else {
                    filme = new Filme();
                    filme.setTitulo(textNomeFilme.getText());
                    filme.setAno(textFieldAno.getText());
                    filme.setDescricao(textFieldDescricao.getText());
                    filme.setFaixaEtaria(comboFaixaEtaria.getSelectedItem().toString());
                    filme.setAtoresPrincipais(textFieldAtores.getText());

                    try {
                        filme.setDuracaoMinutos(Double.parseDouble(textFieldDuracao.getText()));
                    } catch (Exception descricao) {
                        String msg = "A duração em minutos do filme não pode conter letras ou caracters especiais!";
                        JOptionPane.showMessageDialog(btnSalvarFilme, msg);
                    }

                    filmeArray.add(filme);
                    JOptionPane.showMessageDialog(null, "Filme salvo com sucesso!");
                    textNomeFilme.setText(null);
                    textFieldAno.setText(null);
                    textFieldDescricao.setText(null);
                    textFieldAtores.setText(null);
                    textFieldDuracao.setText(null);
                }
            }
        });

        btnSalvarFilme.setForeground(new Color(0, 102, 0));
        btnSalvarFilme.setBounds(585, 11, 89, 23);
        this.add(btnSalvarFilme);

        JLabel lblNewLabel = new JLabel("Para cadastrar atores insira uma v\u00EDrgula entre cada nome.");
        lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 11));
        lblNewLabel.setForeground(new Color(255, 0, 0));
        lblNewLabel.setBounds(48, 398, 369, 14);
        this.add(lblNewLabel);

        JLabel lblFaixa = new JLabel("Faixa et\u00E1ria");
        lblFaixa.setFont(new Font("Tahoma", Font.PLAIN, 14));
        lblFaixa.setBounds(413, 176, 86, 14);
        this.add(lblFaixa);

        JLabel lblDuraoEmMinutos = new JLabel("Dura\u00E7\u00E3o em minutos");
        lblDuraoEmMinutos.setFont(new Font("Tahoma", Font.PLAIN, 14));
        lblDuraoEmMinutos.setBounds(413, 304, 143, 23);
        this.add(lblDuraoEmMinutos);

        textFieldDuracao = new JTextField();
        textFieldDuracao.setColumns(10);
        textFieldDuracao.setBounds(413, 333, 86, 23);
        this.add(textFieldDuracao);

        JButton btnVoltar_1 = new JButton("Voltar");
        btnVoltar_1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                setVisible(false);
            }
        });
        btnVoltar_1.setForeground(Color.BLACK);
        btnVoltar_1.setBounds(585, 527, 89, 23);
        this.add(btnVoltar_1);

        textFieldDescricao = new JTextPane();
        textFieldDescricao.setBounds(48, 199, 319, 98);
        this.add(textFieldDescricao);

        textFieldAtores = new JTextPane();
        textFieldAtores.setBounds(48, 333, 319, 54);
        this.add(textFieldAtores);

        comboFaixaEtaria = new JComboBox();
        comboFaixaEtaria.setModel(new DefaultComboBoxModel(new String[]{"Selecione", "12", "14", "16", "18"}));
        comboFaixaEtaria.setSelectedIndex(0);
        comboFaixaEtaria.setBounds(413, 202, 86, 20);
        this.add(comboFaixaEtaria);

        JComboBox comboBoxFaixa = new JComboBox();
        comboBoxFaixa.setModel(new DefaultComboBoxModel(new String[]{"Selecione", "Livre", "12 Anos", "14 Anos", "16 Anos", "18 Anos"}));
        comboBoxFaixa.setSelectedIndex(0);
        comboBoxFaixa.setBounds(413, 201, 86, 20);
        this.add(comboBoxFaixa);

    }

}

The result:

inserir a descrição da imagem aqui


I had not noticed a slight problem with the age combo, which remains the last value selected in the previous registration. If you want to tidy up this behavior, just add comboFaixaEtaria.setSelectedIndex(0); at the end of actionPerformed from the save movie button as the list starts with a tooltip "Select", the "reset" of this component could be simply set the first item as selected.

textNomeFilme.setText(null);
textFieldAno.setText(null);
textFieldDescricao.setText(null);
textFieldAtores.setText(null);
textFieldDuracao.setText(null);
comboFaixaEtaria.setSelectedIndex(0);
  • 1

    Bah, vlw Diego I’ll use your example to split all the screens. And the combo box too. Really helped :D

  • @Kimberlygonçalves! :)

  • Just one last question, if I need a third screen, which opens through the second, how do I do? Because only the first screen that has Frame set. I tried to put frmHappyCine.getContentPane(). add(tela3, "name_1417798624613276"); on screen 1 but it didn’t work, I’m on time on this, you’ve helped too much, thank you very much.

  • @Kimberlygonçalves It would be interesting to open another question, because it is a new doubt, even to avoid that this answer is too long and leaves the scope of this question. When creating, be sure to quote this question, to facilitate other people try to help too :)

-1

In the combobox, the line you need to pay attention to is as follows:

comboBoxSelecionarFilme.setModel(new DefaultComboBoxModel(stringFilme));

In it you pass the string with the movies to the combobox and only do it once. If you need this list to update, you need to update stringFilme and load the combobox again with stringFilme updated. I recommend that you create a function that groups all these operations:

1- reload an updated list with filmeArray;

2- reload stringFilme from filmeArray;

3- reload the comboBoxSelect. In this case just copy the above line.

Then just use every change.

  • Honestly this does not solve the problem, not in the way it was explained. See my comment about what’s causing the problem. The solution is more complex than that, I just didn’t answer because I would have to change other things, which would divert the answer from the real problem.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.