Como atualizar um JLabel em um Frame por uma classe Java?

5 respostas
programaçãojava
P

Olá, eu tenho uma interface com vários JLabel chamada criativamente de “Interface”, só que quero modificar qualquer um desses JLabel por outra classe (Classe teste) sem ser diretamente pela interface, basicamente eu quero deixar o label vísivel ou não usando o “Visible”, como faço isso em outra classe?

5 Respostas

darlan_machado

Você sabe o que é:

  • Escopo de variáveis?
  • Modificadores de acesso?
  • Métodos assessores?

E sabe como cada modificador de acesso funciona?

P

Sim, inclusive eu alterei uns dos JLabel para public, mas mesmo assim não funciona

P

Peao_Branco1.setVisible(false);

Peao_Branco1 é um JLabel e ta como public na Interface, porém não funciona esse código na classe

darlan_machado

Alguns pontos:
Se você tem um JLabel declarado assim

public JLabel Peao_Branco1;

Você já está fazendo coisa errada.
Caso você seguisse a convenção javaBeans, saberia que apenas classes levam a primeira letra maiúscula e que nomes de variáveis e atributos começam, sempre, com letras minúsculas (salvo quando se trata de uma constante, mas aí é outra coisa). Além disso, nomes compostos seguem o padrão CamelCase e não utilizam-se de hífen ou underline para serem unidos.

Especificamente falando sobre o problema.
Qual a necessidade de ter um objeto externo manipulando os atributos desta classe?
Caso a razão seja válida, você precisa se recordar que só conseguirá fazer qualquer coisa se a instância em que está promovendo alterações seja a mesma que está em execução.
Além disso, você deveria utilizar os métodos assessores e não setar diretamente o modificador do JLabel para public.
Poste o código.

D

Poderia usar o padrão Observer/Observable:

class Item { // extends Observable
  String nome;
  Observable observable;
  public void adicionarObservador(observer) {
    observable.addObserver(observer);
  }
  public void atribuirNome(nome) {
    if (!Objects.equals(this.nome, nome)) {
      this.nome = nome;
      observable.setChanged();
      observable.notifyObservers(this);
    }
  }
}

class Janela extends JFrame implements Observer {
  List itens;
  List labels;
  void atribuirItens(itens) {
    for (item : this.itens)
      item.removerObserver(this);
    this.itens = itens;
    for (item : this.itens)
      item.adicionarObserver(this);
    atualizarLabels();
  }
  void update(Observable o, Object arg) {
    Item item = (Item) arg;
    Label label = labels.get(itens.indexOf(item));
    label.setVisible(item.obterNome() != null);
    label.setText(item.obterNome());
  }
}
Criado 26 de fevereiro de 2018
Ultima resposta 26 de fev. de 2018
Respostas 5
Participantes 3