Sugestões para o meu código

Olá,fiz este programa simples,um interruptor eletrônico ,uma única coisa de diferente que eu fiz foi o modo do tratamento do JButton,achei o jeito que tratei ele um pouco peculiar.Queria saber a sugestão de vocês,se isto poderia interferir muito no meu aprendizado,irei colocar as imagens das lampadas aqui também,aí é só copiar a classe que eu fiz e colocar as imagens no mesmo projeto :+1:

import java.awt.Color; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Lamp extends JFrame{
JLabel images;
JButton ligar = new JButton(“Ligar Lampada”);
JButton ligar2 = new JButton(“Desligar Lampada”);
ImageIcon lamp = new ImageIcon(getClass().getResource(“lampada1.jpg”));
ImageIcon lamp2 = new ImageIcon(getClass().getResource(“lampada2.jpg”));
Lamp(){
Container a = getContentPane();
a.setBackground(Color.WHITE); //coloquei a cor branca para encaixar com a cor da imagem
generate();
setSize(500,500);
setVisible(true);
images = new JLabel(lamp);

images.setBounds(170,70,169,220);
add(images);

ligar.setBounds(160,300,190,40);
ligar2.setBounds(160,300,190,40);

add(ligar);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setLocationRelativeTo(null);
setLayout(null);

}
public void generate() {
ligar.addActionListener(new ActionListener() {

		@Override
		public void actionPerformed(ActionEvent arg0) {
		ligar.setBounds(800,800,0,0); //local fora da espaço do jframe,oque faz com que ele suma da perspectiva
		ligar2.setBounds(160,300,190,40); //coloquei 2 vezes o setbounds pois se só tivesse 1 e o usuário clicasse no JButton ele iria sumir,pois iriamos manda-lo para fora de perspectiva e não voltaríamos com ele para o lugar inicial
		add(ligar2);
		images.setIcon(lamp2); //setando a imagem como a lampada ligada
		
		}
		
		
	});
	ligar2.addActionListener(new ActionListener() {

		@Override
		public void actionPerformed(ActionEvent arg0) {
		ligar2.setBounds(800,800,0,0); //local fora da espaço do jframe,oque faz com que ele suma da perspectiva ²
		ligar.setBounds(160,300,190,40); //local de inicio
		add(ligar);
		images.setIcon(lamp); //setando a imagem como a lampada desligada
		}});
}
public static void main(String[] args) {
	new Lamp();
}

}

Imagens :

lampada1lampada2

O que tem de “peculiar” no seu código? O fato de colocar os botões fora da tela para escondê-los? Se for isso, acredito que seria mais fácil simplesmente usar setVisible, ou mesmo desabilitar o botão, ou usar um ToggleButton, que emula um interruptor mais apropriadamente.

Você está adicionando (“add(ligar2)”) os imageicon toda vez que um botão é clicado, o que é teoricamente desnecessário. Uma vez que o imageicon já foi adicionado ao JFrame, pode também ser ocultado ou exibido sob demanda, ou mesmo ter a imagem trocada.

Também está usando posicionamento absoluto (com setBounds), o que não é muito recomendado no caso do Swing. Prefira trabalhar com Layout Managers sempre que possível.

Isso foi o que captei superficialmente, não sei se era a ideia.

Abraço.

1 curtida

Olha posso dar uma sugestão para vc que dis estar em processo de aprendizagem. Use uma arquitetura de software que o ajude a criar e manipular as interfaces. Eu no inicio programava desse jeito que vc fez e sofri muito, pois o codigo fica dificio mudar e ate de entender. Por isso passei a utilizar a Arquitetura MVC onde o software e separado em 3 camadas. Estou fazendo uma serie de videos com exemplos de MVC veja que com essa arquitetura o codigo fica limpo e separado de forma coeso e fracamente acoplado. Veja esse Video: https://www.youtube.com/watch?v=rMafP3EvckM&t=7s

1 curtida

Obrigado pela dica,irei começar a fazer isto,para falar a verdade,eu fazia isto mesmo,só que fui fazendo cada vez menos até que ignorei este método que pode ajudar muito com a organização do código :+1:

Valeu pelas dicas!