MiniJava » Tutoriais

Exemplo de utilização de miniJava para construção de componentes visuais

Você terá de criar classes para gerar suas janelas. ( menu File » New » Class). Escolha o nome adequado, e clique em Finish.

  • Vamos começar com um tipo bem simples de janela:
import br.ufpe.cin.miniJava.gui.Window;

public class Teste1 extends Window {
	
	public Teste1 () {
		super("miniJava");
		setVisible(true);
	}
	
	public static void main(String[] args) {
		new Teste1();
	}
}

O código acima cria uma nova janela em branco, com o tamanho e posição default, e o título "miniJava", e logo em seguida exibe-a  na tela do usuário; a execução deste código exibiria a seguinte janela:

Para visualizar uma janela que você construiu, execute o programa da sua classe ( menu Run » Run As » Java Application); Compare o seu resultado com a tela acima.

- - - -

O nosso segundo tipo de janela é praticamente igual ao primeiro, mas dessa vez informamos o tamanho da janela (através do método setSize) e a posição da tela na qual ela será exibida (método setPosition). Observe o que precisamos adicionar no código:

import br.ufpe.cin.miniJava.gui.Window;

public class Teste2 extends Window {
	
	public Teste2 () {
		super("miniJava");
		setSize(400,300);
		setPosition(20,50);
		setVisible(true);
	}
	
	public static void main(String[] args) {
		new Teste2();
	}
	
}
  

Este código vai exibir uma janela de 400 pixels de largura por 300 pixels de altura, na coordenada (20,50) da tela, considerando que o ponto (0,0) é a extremidade superior esquerda da tela. Veja a janela:

- - - -

Nossa próxima tela será onde começaremos a inserir componentes dentro das janelas. Com poucas linhas de código conseguimos fazer isto, utilizando-se do método add, que também informa a posição onde os subcomponentes serão inseridos:

import br.ufpe.cin.miniJava.gui.Window;
import br.ufpe.cin.miniJava.gui.Button;
import br.ufpe.cin.miniJava.gui.Label;
import br.ufpe.cin.miniJava.gui.TextField;


public class Teste3 extends Window {

	private Button botao;
	private TextField texto;
	private Label mensagem;
	
	public Teste3() {
		super("miniJava");
		setSize(400,300);
		setPosition(20,50);
		
		botao = new Button ();
		texto = new TextField ();
		mensagem = new Label ();
		
		add(texto,10,15);
		add(botao,100,100);
		add(mensagem,10,45);
		
		setVisible(true);		
	}
	
	public static void main(String[] args) {
		new Teste3();
	}
	
}
  

 O método add vai inserir na janela um campo de texto na posição (10,15), um botão na posição (100,100) e um label na posição (10,45):

- - - -

Tudo legal, mas... O que nossa janela faz? Nada, não é mesmo? Contém apenas componentes inseridos nela, que não interagem de forma alguma. Vamos inserir uma ação e atribuí-la ao botão OK, para que quando clicado ele faça "alguma coisa".

import br.ufpe.cin.miniJava.gui.Window;
import br.ufpe.cin.miniJava.gui.Button;
import br.ufpe.cin.miniJava.gui.Label;
import br.ufpe.cin.miniJava.gui.TextField;


public class Teste4 extends Window {
	
	private Button botao;
	private TextField textField;
	private Label label;
	
	public Teste4(){
		super("miniJava");
		setSize(400,300);
		setPosition(20,50);
		
		botao = new Button ();
		textField = new TextField ();
		label = new Label ();
		
		add(textField,10,15);
		include(botao,10,100);
		add(label,10,45);
		
		setVisible(true);
	}

	public static void main(String[] args) {
		new Teste4();
	}

	public void clickEvent() {
		String novoTexto = textField.getText();
		label.setText(novoTexto);
		setTitle(novoTexto);
	}
	
}

Essa "coisa" que o botão vai fazer quando clicado deverá ser descrita no método clickEvent. No nosso caso, ele altera o texto do label (método setText) e o título da janela (método setTitle), baseado no texto que está no campo de texto (método getText). Veja o resultado:

- - - -

E se ao invés de um botão apenas, tivéssemos dois, ou mais? Como ficaria nosso código?

import br.ufpe.cin.miniJava.gui.Button;
import br.ufpe.cin.miniJava.gui.Component;
import br.ufpe.cin.miniJava.gui.Label;
import br.ufpe.cin.miniJava.gui.TextField;
import br.ufpe.cin.miniJava.gui.Window;

public class Teste5 extends Window {
	
	private Button botao1;
	private Button botao2;
	private TextField textField;
	private Label label;
	
	public Teste5(){
		super("miniJava");
		setSize(400,300);
		setPosition(20,50);
		
		botao1 = new Button ();
		botao2 = new Button ("Limpar");
		textField = new TextField ();
		label = new Label ();
		
		add(textField,10,15);
		include(botao1,10,100);
		include(botao2,10,200);
		add(label,10,45);
		
		setVisible(true);
	}

	public void clickEvent(Component component) {
		if (component == botao1) {
			String novoTexto = textField.getText();
			label.setText(novoTexto);
			setTitle(novoTexto);
		}
		if (component == botao2) {
			label.setText("Label");
			setTitle("miniJava");
			textField.setText("");
		}
	}
	
	public static void main(String[] args) {
		new Teste5();
	}


}

Precisamos criar primeiramente mais um botão, informar que ele terá uma ação ao ser clicado (através do método addClickListener), adicionar este novo botão na janela (método add, como visto anteriormente) e descrever sua ação no método clickEvent. No nosso exemplo, o segundo botão apaga o texto que estiver no campo de texto, e retorna os valores originais do texto do label ("Label") e do título da janela ("miniJava"). Observe novamente as ações dos dois botões (botões OK e Limpar, respectivamente):

A partir destes 5 tipos de janelas simples que foram criados, você poderá usar sua criatividade e desenvolver outros tipos de janelas com mais componentes e mais ações. Em seguida temos um exemplo interessante do uso de miniJava. Execute-o e veja como pode ser simples fazer alguns tipos de janelas:

import br.ufpe.cin.miniJava.gui.*;

public class ANewListener extends Window {

	private Label label;
	private ComboBox comboBox;
	private RadioButtonGroup radioButtonGroup;
		
	public ANewListener () {
		setTitle("Cores e fontes");
		setSize(640,480);
		setPosition(50,50);
		
		label = new Label("Bach - Toccata Et Fugue In Dm",MiniJavaConstants.CENTER);
		label.setSize(640,30);
		label.setPosition(0,30);
				
		comboBox = new ComboBox();
		comboBox.addItem("Verde");
		comboBox.addItem("Azul");
		comboBox.addItem("Vermelho");
		comboBox.setSize(200,25);
		comboBox.setPosition(40,60);
		
		radioButtonGroup = new RadioButtonGroup();
		radioButtonGroup.addItem("Arial");
		radioButtonGroup.addItem("Times New Roman");
		radioButtonGroup.addItem("Verdana");
		radioButtonGroup.addItem("Courier New");
		radioButtonGroup.addItem("Comic Sans MS");
		radioButtonGroup.setSize(180,200);
		radioButtonGroup.setPosition(40,100);
		
		include(label);
		include(comboBox);
		include(radioButtonGroup);
		
		setVisible(true);
	}
	
	public void stateEvent(Component component) {
		if (component == comboBox) {
			Color cores [] = {new Color("#00CC00"), new Color("#0000FF"), new Color("#FF0000")};
			int posicao = comboBox.getSelectedIndex();
			label.setForeground(cores[posicao]);
		}
		if (component == radioButtonGroup) {
			String fontName = radioButtonGroup.getSelectedItem();
			Font fonte = new Font(fontName);
			label.setFont(fonte);
		}
	}
	
	public static void main(String[] args) {
		new ANewListener();
	}

}