Sugestões para o meu código

4 respostas
java
N

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

4 Respostas

T

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.

S

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

N

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:

N

Valeu pelas dicas!

Criado 29 de junho de 2018
Ultima resposta 29 de jun. de 2018
Respostas 4
Participantes 3