Então, o problema eu seguinte:
O meu programa tem um JTabPane onde tem 4 abas cada um com um painel diferente, onde nesse painel existe uma quantidade indeterminada de subpaineis, e nesse subpainel tenho mais um painel dentro dele que são os botões de opção que quando apertados a imagem eh mudada, por exemplo o botão de favorito é apertado, então ele irá atualizar a imagem para outra, o que eu precisava é o seguinte…
Eu queria interligar esses subpaineis, pois na teoria eles são os mesmos em todas as abas, para que caso o usuario esteja em uma determinada aba e modifique um determinado componente(aperte em favoritos por exemplo) nessa aba, as outras abas sejam atualizadas juntas(ou seja mudaram também as imagens do botão favoritos) mas sem eu ter que refazer o painel inteiro, pois iria crashar por um tempo ate q ele seja refeito;
Por exemplo:
tenho 4 abas->Pokemons, favoritos,capturados,desejados
Estou na aba favoritos, e aperto o botão para retirar dos desejados, ate ai ok, na aba favoritos realmente sera refeito o botão,mas nas outras não.
Eu ja tenho o codigo de como refazer sem ter q reiniciar o frame inteiro.
Alguém pode me ajudar pf? estou um tanto quanto desesperado, pois é um projeto da escola e o prazo ta acabando. klkkkkk
Aqui está o cod(basicamente eh so a classe botao e a parte de atualizar na classe PaineisTelaInicial):
public class PaineisTelaInicial extends JPanel{
private Dimension dimension;
private JPanel painelTemporarioBL, painelTemporarioFL;
private int x,y;
private GridBagConstraints c;
private int columns;
public PaineisTelaInicial(Dimension dimension, int idUsuario) {
this.dimension = dimension;
this.x = 0;
this.y = 0;
this.columns = (int) Math.floor(this.dimension.getWidth()/168);
setLayout(new GridBagLayout());
}
public void atualizar(Pokemon poke,int ind, int idUsuario, GridBagConstraints c, JPanel comp, TelaInicial tela) throws SQLException {
this.c = c;
remove(comp);
listaOsPokemons(poke, idUsuario, tela);
addPaineis();
}
public void acrescentaXY() {
if(this.x == this.columns-1) {
this.x = 0;
this.y += 1;
}else {
this.x+=1;
}
}
public JScrollPane criaScrollPane() {
JScrollPane scrollPane = new JScrollPane(this);
scrollPane.setViewportView(this);
int width = (int) this.dimension.getWidth();
int height = (int) this.dimension.getHeight() - 64;
scrollPane.setPreferredSize(new Dimension(width, height));
return scrollPane;
}
public void criaPainelTemporarioFlowLayout() {
this.painelTemporarioFL = new JPanel();
}
public void criaPainelTemporarioBorderLayout() {
this.painelTemporarioBL = new JPanel();
this.painelTemporarioBL.setLayout(new BorderLayout());
}
public void criaBotoes(Image img, Pokemon poke, int idUsuario,TelaInicial tela) throws SQLException{
Botoes bts = new Botoes(tela);
this.painelTemporarioBL.add(bts.criaJButtonPokemon(img, poke), BorderLayout.CENTER);
this.painelTemporarioFL.add(bts.criaBotaoAddFavoritos(poke, idUsuario, this.c, this.painelTemporarioBL));
this.painelTemporarioFL.add(bts.criaBotaoAddCapturados(poke, idUsuario, this.c));
this.painelTemporarioFL.add(bts.criaBotaoAddDesejos(poke, idUsuario, this.c));
}
public void addPaineis() {
this.painelTemporarioBL.add(this.painelTemporarioFL, BorderLayout.SOUTH);
add(this.painelTemporarioBL,this.c);
}
public void addPaineis(int indicePosic) {
this.painelTemporarioBL.add(this.painelTemporarioFL, BorderLayout.SOUTH);
add(this.painelTemporarioBL,indicePosic);
}
public void configuraConstraint() {
this.c = new GridBagConstraints();
this.c.anchor = GridBagConstraints.FIRST_LINE_START;
this.c.insets = new Insets(12,13,13,12);
this.c.gridx = this.x;
this.c.gridy = this.y;
this.c.weighty = y;
}
public void listaOsPokemons(Pokemon poke, int idUsuario,TelaInicial tela) throws SQLException{
acrescentaXY();
Image img = new Imagem().setNewImg(poke.getId(), 140, 140);
criaPainelTemporarioBorderLayout();
criaPainelTemporarioFlowLayout();
criaBotoes(img, poke, idUsuario,tela);
}
}
public class Botoes{
private TelaInicial tela;
public Botoes(TelaInicial tela) {
this.tela = tela;
}
public JButton criaJButtonPokemon(Image img, Pokemon poke) {
JButton botaoPoke = new JButton();
botaoPoke.setIcon(new ImageIcon(img));
ActionListener callEspecPoke = new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println(poke.getNome());
}
};
botaoPoke.addActionListener(callEspecPoke);
return botaoPoke;
}
public JButton criaBotaoAddFavoritos(Pokemon poke, int idUsuario, GridBagConstraints c, JPanel comp) throws SQLException{
JButton btAddFavoritos = new JButton();
btAddFavoritos.setIcon(new ImageIcon(new Imagem().setNewImg(new FavoritosUsuarioDAO().selecionaPokemonFromFavoritosByUserAndPoke(idUsuario, poke.getId()), "Favorito", 20, 20 )));
btAddFavoritos.setToolTipText("Adicionar/Retirar dos Favoritos");
ActionListener acListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
boolean adicionado = new FavoritosUsuarioDAO().selecionaPokemonFromFavoritosByUserAndPoke(idUsuario, poke.getId());
if(adicionado) {
adicionado = false;
new FavoritosUsuarioDAO().retiraPokemonEmFavoritos(poke.getId(), idUsuario);
btAddFavoritos.setIcon(new ImageIcon(new Imagem().setNewImg(adicionado, "Favorito", 20, 20 )));
}
else {
adicionado = true;
new FavoritosUsuarioDAO().inseriPokemonEmFavoritos(poke.getId(), idUsuario);
btAddFavoritos.setIcon(new ImageIcon(new Imagem().setNewImg(adicionado, "Favorito", 20, 20 )));
}
tela.atualizaFrame(poke, c, comp);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
};
btAddFavoritos.addActionListener(acListener);
return btAddFavoritos;
}
public JButton criaBotaoAddCapturados(Pokemon poke, int idUsuario, GridBagConstraints c) throws SQLException {
JButton btAddCapturados = new JButton();
btAddCapturados.setIcon(new ImageIcon(new Imagem().setNewImg( new CapturadosUsuarioDAO().selecionaPokemonFromCapturadosByUserAndPoke(idUsuario, poke.getId()), "Capturado", 20, 20 )));
btAddCapturados.setToolTipText("Adicionar/Retirar dos capturados");
ActionListener acListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
boolean adicionado = new CapturadosUsuarioDAO().selecionaPokemonFromCapturadosByUserAndPoke(idUsuario, poke.getId());
if(adicionado) {
adicionado = false;
new CapturadosUsuarioDAO().retiraPokemonEmCapturados(poke.getId(), idUsuario);
btAddCapturados.setIcon(new ImageIcon(new Imagem().setNewImg(adicionado, "Capturado", 20, 20 )));
}
else {
adicionado = true;
new CapturadosUsuarioDAO().inseriPokemonEmCapturados(poke.getId(), idUsuario);
btAddCapturados.setIcon(new ImageIcon(new Imagem().setNewImg(adicionado, "Capturado", 20, 20 )));
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
};
btAddCapturados.addActionListener(acListener);
return btAddCapturados;
}
public JButton criaBotaoAddDesejos(Pokemon poke, int idUsuario, GridBagConstraints c) throws SQLException {
JButton btAddDesejos = new JButton();
btAddDesejos.setIcon(new ImageIcon(new Imagem().setNewImg(new DesejadosUsuarioDAO().selecionaPokemonFromDesejadosByUserAndPoke(idUsuario, poke.getId()), "Desejado", 20, 20 )));
btAddDesejos.setToolTipText("Adicionar/Retirar dos desejados");
ActionListener acListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
boolean adicionado = new DesejadosUsuarioDAO().selecionaPokemonFromDesejadosByUserAndPoke(idUsuario, poke.getId());
if(adicionado) {
adicionado = false;
new DesejadosUsuarioDAO().retiraPokemonEmDesejados(poke.getId(), idUsuario);
btAddDesejos.setIcon(new ImageIcon(new Imagem().setNewImg(adicionado, "Desejado", 20, 20 )));
}
else {
adicionado = true;
new DesejadosUsuarioDAO().inseriPokemonEmDesejados(poke.getId(), idUsuario);
btAddDesejos.setIcon(new ImageIcon(new Imagem().setNewImg(adicionado, "Desejado", 20, 20 )));
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
};
btAddDesejos.addActionListener(acListener);
return btAddDesejos;
}
}
public class TelaInicial extends JFrame{
private Dimension dimension;
private int idUsuario = 1;
private JTabbedPane jtp;
private ListaDePokemons pkLista;
private PaineisTelaInicial[] paineis = new PaineisTelaInicial[4];
private GridBagConstraints c;
public TelaInicial() throws SQLException{
super("Pokédex");
this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
this.setSizeJFrame();
this.setLocationRelativeTo(null);
this.getContentPane().setLayout(new BorderLayout());
this.jtp = new JTabbedPane();
add(this.jtp,BorderLayout.NORTH);
criaLista();
criaPaineis();
criaAbas();
addOnTabPane();
setVisible(true);
}
public void atualizaFrame(Pokemon poke, GridBagConstraints c, JPanel comp) throws SQLException {
paineis[0].atualizar(poke, poke.getId()-1, idUsuario, c, comp, this);
this.repaint();
}
public void setSizeJFrame() {
DisplayMode tamanho = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDisplayMode();
int width = (int) (tamanho.getWidth()/1.7);
int height = (int) (tamanho.getHeight()/1.1);
this.dimension = new Dimension(width, height);
this.setSize(this.dimension);
}
public void criaLista() throws SQLException {
this.pkLista = new ListaDePokemons(new PokemonDAO().selecionaAllPokemons());
}
public void criaPaineis() {
for(int i =0; i<4; i++) {
this.paineis[i] = new PaineisTelaInicial( this.dimension ,this.idUsuario);
}
}
public void criaAbas() throws SQLException {
this.c = new GridBagConstraints();
this.c.weightx = 1;
this.c.weighty = 1;
this.c.fill = GridBagConstraints.BOTH;
JPanel stretch = new JPanel();
for(Pokemon poke: pkLista.getLista()) {
paineis[0].configuraConstraint();
paineis[0].listaOsPokemons(poke, this.idUsuario, this);
paineis[0].addPaineis();
Adicionar(poke);
}
double width = this.dimension.getWidth()/168;
for(PaineisTelaInicial painel: paineis) {
if (painel.getComponentCount() < width) {
painel.add(stretch, this.c);
}
}
}
public void Adicionar(Pokemon poke) throws SQLException {
if(new DesejadosUsuarioDAO().selecionaPokemonFromDesejadosByUserAndPoke(this.idUsuario, poke.getId())) {
paineis[1].configuraConstraint();
paineis[1].listaOsPokemons(poke, this.idUsuario, this);
paineis[1].addPaineis();
}
if(new FavoritosUsuarioDAO().selecionaPokemonFromFavoritosByUserAndPoke(this.idUsuario, poke.getId())) {
paineis[2].configuraConstraint();
paineis[2].listaOsPokemons(poke, this.idUsuario, this);
paineis[2].addPaineis();
}
if(new CapturadosUsuarioDAO().selecionaPokemonFromCapturadosByUserAndPoke(this.idUsuario, poke.getId())) {
paineis[2].configuraConstraint();
paineis[3].listaOsPokemons(poke, this.idUsuario, this);
paineis[3].addPaineis();
}
}
public void addOnTabPane() {
this.jtp.addTab("Pokemons", paineis[0].criaScrollPane());
this.jtp.add("Desejados", paineis[1].criaScrollPane());
this.jtp.add("Favoritos", paineis[2].criaScrollPane());
this.jtp.add("Capturados", paineis[3].criaScrollPane());
}
}