Tutorial de Computação
Introdução a Programação Gráfica em Java
para MEC1100
v2010.10
Linha de Equipamentos MEC
Desenvolvidos por:
Maxwell Bohr Instrumentação Eletrônica Ltda. – Rua Porto Alegre, 212 – Londrina – PR – Brasil
http://www.maxwellbohr.com.br
1 Introdução
Nesse tutorial vamos criar um projeto que possa ser utilizado como base para outros
programas de controle do MEC1100. Vamos aproveitar esse projeto para mostrar passo a passo o
que é necessário para criar um programa de controle para o equipamento. No final teremos um
programa que permite a seleção da porta USB que será utilizada para se comunicar com o
dispositivo, identificação automática da presença de um dispositivo na porta selecionada e todo o
suporte para o envio de comandos de controle para o dispositivo, o que facilitará muito o
desenvolvimento de outros programas, pois esse poderá ser utilizado como base.
2 Material
Para esse tutorial é necessário um MEC1100 conectado em uma porta USB do computador,
também será necessário o NetBeans 6.9 ou superior para a criação dos programas e a biblioteca
RXTX para fazer a comunicação serial com o MEC1100.
Figura 1: MEC1100
3 Projeto
O nosso primeiro passo será instalar os programas necessários. Para isso, siga os passos
contidos no “tutorial_java_mec1100” no topico do tópico “ Instalação e Configuração do Ambiente
de Desenvolvimento Java”.
Feito isto, iremos criar um projeto no NetBeans 6.9 que possa utilizar a biblioteca de
controle do MEC1100 e o RXTX. Para isso, vamos abrir o NetBeans 6.9 e criar um novo projeto.
Na versão em português do NetBeans, devemos clicar na opção de menu Arquivo / Novo Projeto,
escolha “Aplicativo de área de trabalho java”, coloque o nome do Projeto como “Base”, escolha um
lugar para salvar o projeto e clique em Finalizar e com isso será criado um novo Projeto .
1
Com o projeto criado, devemos agora fazer com que ele possa utilizar a biblioteca de
controle do dispositivo e o RXTX. Existe algumas maneiras diferentes para permitir esse uso, no
entanto, usaremos a forma mais fácil, que é copiar os arquivos MEC1100.java e o
EMEC1100Error.java para dentro de nossa pasta “src”do projeto. Para adicionar a biblioteca do
RXTX devemos clicar em Bibliotecas no menu Projetos dentro do NetBeans e ir em Adicionar
jar/pasta e adicionar o RXTXcomm.jar. Com isso feito a aparência da nossa pasta “src” deverá se
parecer com o seguinte:
Figura 2: Pasta "src" do projeto
E a aparência do nosso projeto no NetBeans deverá se parecer com o seguinte:
Figura 3: Aparência do projeto no NetBeans
Com os arquivos copiados, devemos alterar o pacote do EMEC1100Error.java e
Mec1100.java. Para isso, abra-os e, onde está escrito “package”, mude para o nome do projeto. No
nosso caso mude para “base”.
Dentro do arquivo Baseview.java temos duas opções: ver o código fonte clicando em
“Código-fonte” ou ver o projeto gráfico clicando em “Projeto”.
Agora iremos criar a interface gráfica. Essa interface deve permitir a seleção da porta USB
onde o dispositivo está conectado e indicar se a comunicação está correta. Para isso criaremos a
interface demonstrada na figura a seguir:
2
Figura 4: Programa pronto.
Essa interface possui apenas componentes gráficos básicos. Um componente jComboBox
que permite a seleção da porta USB, um componente jPanel e um jLabel, que indica o estado da
conexão . Iremos criar essa interface passo a passo.
Primeiramente vamos incluir um componente jComboBox. Esse componente pode ser
encontrado na Paleta / Componente Swing / Caixa de combinação.
Figura 5: Componente jComboBox
3
Selecione o componente “Caixa de combinação” e clique dentro do painel do projeto para
adicionar o jComboBox. Após adicionar o jComboBox nosso “BaseView” terá a seguinte aparência:
Figura 6: Adição de um jComboBox
Vamos mudar a seguintes propriedade desse componente em Propriedades:
Tamanho Horizontal
=
100
Agora, vamos mudar o nome da variável que acessa o jComboBox clicando com o botão
direito sobre o mesmo e, em Change Variable Name, vamos colocar “comboBoxSerial”
Com o comboBoxSerial configurado vamos adicionar dois componentes que irão indicar o
estado da conexão, um jLabel e um jPanel. Os dois componentes podem ser encontrados na
“Paleta”. A seguir uma imagem do “BaseView” após a adição dos componentes ao Painel superior:
Figura 7: Adição de um JLabel e um jPanel
Vamos mudar as seguintes propriedades do componente jPanel, selecionando-o e
modificando as seguintes propriedades :
backgroud
=
[0,255,0]
Tamanho vertical
=
25
Tamanho horizontal
=
25
4
Vamos mudar também o nome da variável que acessa este jPanel clicando com o botão
direito sobre ele e em Change Variable Name vamos colocar “LEDStatus”
No componente jLabel iremos mudar as seguintes configurações:
text
=
Desconectado
foreground
=
Vermelho
font
=
14 / Negrito
Vamos mudar também o nome da variável que acessa o jLabel clicando com o botão direito
sobre o mesmo e em Change Variable Name vamos colocar “labelStatus”
Ao final nossa barra superior irá se parecer com o seguinte:
Figura 8: Aparência final da parte superior do programa.
Agora que temos a parte visual do programa vamos implementar suas funcionalidades.
Primeiramente vamos implementar as rotinas de inicialização e finalização do programa. Para isto
mude para o modo ”Código-fonte” e abaixo da “public class BaseView” crie um objeto do tipo
MEC1100 conforme a figura a seguir:
Figura 9: Criando um objeto do tipo MEC1100
5
Com isto feito, voltamos a aba “Projeto” e vamos adicionar o comando “listar as portas
seriais” no comboBoxSerial. Para isto clique com o botão direito no comboBoxSerial e vá em
“personalizar código” e, em seguida, adicione o seguinte código:
Vector<String>portas=base.MEC1100.GetInstalledSerialPorts();
comboBoxSerial = new javax.swing.JComboBox();
//Listas portas disponíveis no comobBoxSerial
for (String x : portas) {
comboBoxSerial.addItem(x);
}
A janela de personalização do código deverá se parecer com o seguinte:
Figura 10: Janela de personalização do comoboBoxSerial.
Antes de enviar um comando de controle para o MEC1100 é necessário iniciar a
comunicação em uma porta USB. Isso é feito com o método “OpenCommunication” da classe de
controle do MEC1100.
Esse método recebe como parâmetro uma String, com uma porta USB, onde o dispositivo
que será controlado deve estar. Vamos fazer com que, assim que seja selecionado algo no
comboBoxSerial, o programa tente iniciar uma comunicação com o MEC1100. Para isto clique
como o botão direito no comboBoxSerial e vá em Eventos/Popup/PopupMenuWillBecameInvisible
e, então você será direcionado para o código fonte onde deverá inserir o seguinte código:
6
try{
//Inicia a comunicação com a porta selecionada na combobox
mec.OpenCommunication((String) comboBoxSerial.getSelectedItem());
if(mec.IsConnected()){
//Muda a cor do texto para verde
labelStatus.setForeground(new java.awt.Color(50, 205, 50));
// muda o texto adicionando as informaçoes do MEC1100
labelStaus.setText("Conectado a um "+mec.DeviceInfo());
}else{
//Muda a cor para vermelho
labelStatus.setForeground(new java.awt.Color(255, 0, 0));
//muda o texto para desconectado
labelStaus.setText("Desconectado");
}}catch (Exception err){
System.out.println("Erro:" + err.getMessage());
}
Esse código irá iniciar a comunicação, caso possível, e atualizará a jLabel com as
informações do MEC1100 e mudará a cor para verde se o mesmo estiver conectado.
Nesse momento, podemos testar nosso programa. O mesmo deverá listar todas a portas
seriais/USB instaladas no sistema operacional. Para testar pressione F6. O programa deverá estar
semelhante a figura a seguir:
Para verificar continuamente a presença de algum dispositivo, iremos utilizar um método
chamado actionPerformed. Esse método executa um código em intervalos pré-determinados de
acordo com o “timer” que criaremos a seguir.
7
Então, iremos no editor de código para realizarmos uma modificação. A classe deve
implementar o ActionListener. Para isto, logo após “public class BaseView extends FrameView”
que se localiza no inicio do código, adicionaremos “implements ActionListener”. Deverá ficar igual
ao código a seguir:
public class BaseView extends FrameView implements
ActionListener{
Agora vamos declarar uma variável do tipo Timer. Para isso, abaixo do local onde criamos o
objeto do MEC1100, insira o código a seguir:
Timer timer
Feito isso, vamos criar o actionPerformed. Para isto após o último método insira o seguinte
código:
public void actionPerformed(ActionEvent e) {
try{
mec.OpenCommunication((String)
comboBoxSerial.getSelectedItem());
if(mec.IsConnected()){
labelStatus.setForeground(new java.awt.Color(50, 205, 50));
labelStatus.setText("Conectado a um "+mec.DeviceInfo() );
}else{
labelStatus.setForeground(new java.awt.Color(255, 0, 0));
labelStatus.setText("Desconectado");
}
}catch (Exception err){
System.out.println("Erro:" + err.getMessage());
}
}
Agora, iremos fazer esse código ser acionado a cada 100 ms. Para isso vá no método “public
BaseView” no incio do código e adicione o seguinte código, abaixo da linha “initComponents();”:
new Timer(100,this).start();
8
A seguir uma imagem com o programa final e com os dois estados da conexão. No primeiro,
a aparência sem conexão e, no segundo, com conexão.
Para finalizar o projeto iremos mudar o nome do programa indo na aba “Projetos” e clicando
com o botão direito sobre o nome do projeto e, em seguida, em Propriedades.
Na tela que foi aberta, escolha no menu Categoria, a opção “Apllication”. Neste, vamos
alterar o titulo para “Base”.
Figura 13: Mudando o nome do programa.
Dê OK e teste seu programa.
4 Conclusão
Nesse tutorial vimos como criar um programa base para controlar o MEC1100. A partir do
programa criado nesse tutorial podem ser criados outros programas com maior facilidade, pois toda
a estrutura de base já está implementada. Todos os outros tutoriais vão utilizar o programa criado
nesse tutorial como base. Se esse tutorial for bem entendido não haverá problemas para o
entendimento dos outros tutoriais e da programação para o dispositivo.
9
Download

Introdução a Programação Gráfica em Java para MEC1100