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.
– user28595
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.– user28595
@diegofm Altered, I’m looking at the example you indicated, thanks :)
– Kimberly Gonçalves
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.
– user28595
I’ll redo it like you suggested then, thanks!
– Kimberly Gonçalves
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.
– user28595
I’ve never done it this way, but I’m going to do some research, thanks for the tips. :)
– Kimberly Gonçalves
You can close the topic, in case I can’t, I’ll create a again kkk
– Kimberly Gonçalves
There is not much secret, just create classes type
MenuInicialPainel
,RealizarVendasPainel
andCadastrarFilmePainel
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.– user28595
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.
– user28595
If you can help then through the chat thank you!
– Kimberly Gonçalves
See my answer below.
– user28595