javaslack

Segunda-feira, Outubro 11, 2004

Rapidinha de java #3

Percebendo a demanda de perguntas sobre o assunto em fórums de java e uma dúvida que já tive sanada, venho a publicar como centralizar "telas" em java.

Jeito trabalhoso:

Classes utilizadas nessa demonstração: Container, Dimension, JFrame, Toolkit.

Container: é uma classe container responsável pela adição de componentes do pacote AWT.

Dimension: é uma classe responsável por encapsular largura e altura de um componente, recebendo as dimensões retornadas pelos métodos dos respectivos objetos.

JFrame: esta é uma extensão da classe Frame do pacote awt, mas que possui suporte aos componentes do pacote swing, sendo que o JFrame é totalmente incompatível com a classe Frame, esta classe provê tarefas básicas de uma janela.

Toolkit: esta classe é uma superclasse abstratas de todas as implementações do pacote AWT, ela contém um "pacote" de tarefas básicas, como a que vamos utilizar aqui que é retornar a resolução da tela do usuário.

Então vamos colocar a mão na massa e comentar alguns pontos que considero relevantes:

Código:
import java.awt.Container;
import java.awt.Toolkit;
import java.awt.Dimension
import javax.swing.JFrame;

/* Estamos herdando métodos e atributos da classe JFrame */
public class Demonstracao extends JFrame {

/* Declaração das ações a serem executadas pelo contrutor default */
public Demonstracao() {

/* Passa o argumento que irá definir o título da janela ao construtor da superclasse JFrame*/
super("Classe de demonstracao");

/* Aqui atribuimos a referência container o método que retorna o painel de conteúdo de JFrame */
Container container = getContentPane();
}

/* Aqui iniciamos o corpo do método main */
public static void main (String args[]) {

/* Instanciamos a classe Demonstracao, que possui todos os métodos e atribuitos de JFrame */
Demonstracao janela = new Demonstracao();

/* Invocamos o método que irá definir o tamanho da janela da classe Demonstracao */
janela.setSize(250,250);

/* Aqui atribuimos uma refência para a classe Dimension que irá receber e encapsular os valores retornados pelo método getScreenSize, primeiro invocamos o método que getDefaultToolkit que irá nos retornar um objeto default toolkit e nos possibilitar utilização do método getScreenSize() para retornar o valor da resolução de tela em pixels;
Dimension tela = Toolkit.getDefaultToolkit().getScreenSize();

/* Aqui estamos utilizando a referência com os métodos de largura(Width) e altura(Height), diminuimos pelo tamanho do JFrame e dividimos por 2, fazendo o casting para inteiro, para que possamos ter a posição exata e central da tela.
int largura = (int) (tela.getWidth() - 250) / 2;
int altura = (int) (tela.getHeight() - 250) / 2;

/* Por fim utilizamos o método herdado do JFrame para definir a posição do objeto na tela, à partir dos valores obtidos acima */
janela.setLocation(largura,altura);

/* Método responsável por definir a "visibilidade" da janela na tela */
janela.setVisible(true);
}
}

Jeito simples:

Retirado do fórum do GUJ

Pessoal,não precisa nada disso...eh soh(do JDK1.4 em diante):
Código:
//centraliza o frame na tela
frame.setLocationRelativeTo(null);

Mais uma vez sairá sem a identação do código porque não tenho paciência para tags html, grato por sua compreensão e no intuito de ter ajudado da melhor forma.

[ ]'s Bruno

Sexta-feira, Outubro 01, 2004

Rapidinha de java #2

Como pegar a data e hora do sistema no Java, foi essa a pergunta de um colega na lista de discussão do deitel e para todos segue a resposta.

Para tal tarefa vamos utilizar duas classes, uma do pacote util chamada GregorianCalendar e a outra do pacote text chamada SimpleDateFormat.

GregorianCalendar é uma subclasse de Calendar que nos fornecerá datas completas,horários, dia do mês e etc.

SimpleDateFormat é a classe que permite com que você utilize o formato desejado de data ou hora.

Então vamos parar de falar e agir:

Código:

/* Classe que demonstra as funcionalidades de GregorianCalendar e SimpleDateFormat */

public class Demonstra {

public static void main (String args[]) {

/* Aqui instanciamos a classe GregorianCalendar de forma que ela chame o construtor padrão dela */

GregorianCalendar calendario = new GregorianCalendar();

/* Aqui instanciamos a classe SimpleDateFormat passando argumentos para o construtor de forma que ele inicialize os valores através dos argumentos passados */

SimpleDateFormat data = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat hora = new SimpleDateFormat("HH:mm");

/* Aqui chamamos o conhecido método println para exibir nossos dados, na primeira linha fazemos com que o método getTime nos retorne todos os dados, através da referência "calendario" para a classe GregorianCalendar */

System.out.println("Informação completa " + calendario.getTime());

/* Aqui fazemos com que o valor retornado pelo método getTime seja formatado pelo método format que passará uma mensagem ao objeto "data" */

System.out.println("Data " + data.format(calendario.getTime());

/* Aqui fazemos com que o valor retornado pelo método getTime seja formatado pelo método format que passará uma mensagem ao objeto "hora" */

System.out.println("Hora " + hora.format(calendario.getTime());

}
}


Espero ter ajudado da melhor forma, e peço desculpas pela ausência de identação, mas é que não tive tempo nem paciência com as tags html.

Quinta-feira, Setembro 30, 2004

Rapidinha de shell #4

Aproveitando a ajuda que dei a um camarada da lista de shell isso desencadeou mais uma rapidinha, ele está com o seguinte problema: queria checar o status de sua conexão e fazer se fosse derrubada a conexão o gateway dele automaticamente reconectasse, e buscando apoio no shell enviei a gasolina pra ele.

#!/bin/bash
ping -c 2 www.uol.com.br

while [ $? -ne 1 ];
do

ping -c 2 www.uol.com.br

echo "está conectado"

if [ $? -ne 0 ]; then

echo "está desconectado"

fi
sleep 300

done &

Obs: 1- A variável $? retorna se o comando foi bem sucedido ou não.
2- -ne significa not equal
3- & faz o script rodar como um daemon
4- Para mais informações man ping, man echo, man sleep.

Crítica: Um dos pontos falhos desse script é que se o host www.uol.com.br cair ele irá interpretar como se sua conexão tivesse caído.

Espero ter ajudado e paz a todos!

Sexta-feira, Setembro 17, 2004

Projeto Mini HelpDesk aprovado na sourceforge.net

Subject: SourceForge.net Project Approved


Your project registration for SourceForge.net has been approved.

Project Information:

Project Descriptive Name: Mini HelpDesk
Web Server: minihelpdesk.sourceforge.net

Description: Mini HelpDesk is a software written in java language that
enables professional to register computer problems in your clients,
and generate report trough jasperreports library in pdf, xml, html.

Uhu! Agora é muito trabalho pela frente e estudo, mais uma vez
agradeço a todos pelo apoio!


Segunda-feira, Setembro 13, 2004

Projeto Mini HelpDesk aprovado!

É como felicidade que anuncio a aprovação de meu projeto denominado Mini HelpDesk e disponibilizado sobre GLP, totalmente em Java, é um modesto software no qual estou aprendendo e muito no seu desenvolvimento!

Assunto: CodigoLivre: Projeto Aprovado
Data: 13/09/04 11:07

O registro de seu projeto no CodigoLivre foi aprovado.

Nome Completo: Mini HelpDesk
Home Page: minihelpdesk.codigolivre.org.br

Agradeço a todos os amigos que contribuíram com o meu aprendizado e continuam a contribuir, e a codigolivre por incentivar o desenvolvimento de softwares.

Sábado, Setembro 11, 2004

Pegando o touro a unha - jasperreports e iReports

Bom primeiramente quero notificar aos leitores (se é que eles existem) que esse post será constantemente modificado, devido a falta de tempo para escrever tudo de uma vez só.

Há exatos 3 semanas atrás em minha insolita caminhada no aprendizado dessa maravilhosa linguagem denominada Java, procurei uma forma de gerar relatórios para o meu pequeno software que desenvolvi de helpdesk eis que então encontrei o pacote JasperReports e a interface gráfica para este pacote denominada iReport.

Bom a primeira coisa a ser feita foi pesquisar muito, quando as pessoas falam que o google é sua mãe, acredite é o melhor lugar para se pesquisar, só que eu já tinha conhecimento de onde ir, nos ótimos sites de java: GUJ, Javafree.org, SouJava, PortalJava, então finalmente depois de horas pesquisando encontrei 2 ótimos artigos um no GUJ e outro no Javafree.org. Infelizmente todas as informações que eu queria não encontrei, sendo assim tive de correr atrás de informação seja buzinando a paciência dos meus amigos seja lendo os docs, faqs, fóruns tudo a respeito do assunto, então no intuito de oferecer a minha pequena contribuição, eu lhes apresento:

JasperReports e iReports

1. Introdução

JasperReports é uma biblioteca voltada para geração de relatórios de forma dinâmica, estando no mesmo nível ou acima de algumas ferramentas comerciais, sendo capaz de gerar relatórios nos mais diversos formatos: xml, pdf, html..., esta biblioteca é puramente escrita em Java e pode ser usada em diversas aplicações, sejam elas J2SE ou J2EE.

Toda a informação de design e dados do relatório é armazenada em um XML, essa informação pode vir de várias fontes de dados, sejam elas base de dados relacionais, collections, arrays de objetos.

Para utilizarmos um relatório definido no XML, este precisa ser compilado primeiro, esta compilação implica na compilação de todas as expressões em Java definidas no XML, sendo que são feitas inúmeras verificações durante este processo, gerando assim um arquivo compilado com a extensão jasper.

A definição de todo o relatório precisa receber dados para que o relatório seja "montado", sendo que alguns desses dados são passados via parâmetros para o relatório, a maioria dessas informações estão contidas em alguma origem de dados, normalmente sendo obtidos através de dados extraídos de objetos e colocados no relatório ou estão são recuperados de alguma base de dados relacional através de uma conexão JDBC.

O resultado dessa operação é um novo objeto capaz de ser exibido através da interface gráfica de impressão do jasper, ou podendo ser exportado em algum dos formatos citados: pdf, xml, html...

2. Uma descrição das API's necessárias

Uma simples visualização da API do pacote jasperreports, retirada do livro "The JaperReports Ultimate Guide" (por favor prepare sua lente de aumento):




Descrição básica das classes mais importantes:

net.sf.jasperreports.engine.JasperManager

Esta classe será nosso canivete suíço, uma vez que ela será responsável por compilar o xml que nós vamos definir, preencher todo o conteúdo do relatório e gerar os pdfs, como a tradução do próprio nome diz ela é gerenciadora do Jasper.

net.sf.jasperreports.engine.design.JasperDesign

Cada instância é obtida através do relatório que você definiu no arquivo xml que é então passado a biblioteca interna para análise de sua sintaxe, existem muitos exemplos de como definir seu xml no pacote do jasper, todas as instâncias dessa classe serão submetidas a compilação para preenchimento do relatório. É esta classe que irá receber o xml lido pela classe JasperManager.


net.sf.jasperreports.engine.JasperReport

Essa classe irá armazenar o JasperDesign compilado gerando um novo objeto JasperReport.

net.sf.jasperreports.engine.JasperPrint

É a classe que irá conter todo o relatório preenchido com os dados resgatados da base de dados.

net.sf.jasperreports.view.JasperViewer

É a classe responsável pela exibição do relatório preenchido e o estágio final caso você queira apenas o modo básico para se gerar relatórios.

(documento em fase de edição)

Rapidinha de java #1

Classpath no netbeans

Bom como intuito de complementar o artigo publicado na GUJ vamos explicar como setar o classpath no netbeans, pois pelo pouco que conheço você o netbeans nem te dá bola quando você seta seu classpath por variáveis de ambiente, pois acredite, ele tem as dele :)
Vamos supor que você baixou um jar por exemplo do jasperreports e deseja utilizá-lo lógico para gerar seus relatórios, você terá duas opções, uma será copiar para o diretório:

/usr/lib/java/jre/lib/ext/

Que é o único diretório onde o netbeans busca por pacotes adicionais, ou de outra forma você pode adicionar da seguinte forma:

1- Abra o netbeans
2 - Clique na aba Filesystems, depois nesta mesma aba logo abaixo irá exibir o nome Filesystems, clique com o direito do mouse nele.
3 - Vá em mount -----> Archive Files
4 - Procure o seu .jar, o selecione e dê ok

Pronto você já tem o seu jar listado no classpath no netbeans, caso seja um diretório que tu deseja adicionar basta ao invés de ir em Archive Files ir em Local Directory. Espero ter ajudado aqueles que tem essa dúvida básica como eu já tive e paz a todos.

Artigos consultados: Netbeans.org

Segunda-feira, Setembro 06, 2004

Rapidinha de shell #3

Fala hermano, você deve estar se perguntando: Pra que eu quero a porcaria de um loop pra adicionar uma renca de usuários, se eu vou ter que adicionar a senha de cada um na unha, seu maldito? Então vamos lá, usufluindo da boa lista de shell, temos o seguinte script perl:

#!/usr/bin/perl
$pass = crypt ($ARGV[0],"60");
print "$pass";

Maiores informações temos (Dicas-L).

Agora vamos abusar sexualmente das rapidinhas anteriores, onde foi explicado como gerar senhas aleatórias e como adicionar os usuários, teríamos então:

#!/bin/bash

#Relação de usuários e senhas, que PROVAVELMENTE você criou(vide rapidinhas anteriores).
ARQUIVO="/home/p0lux/usuarios"

#Shell do usuário e seu respectivo home, no meu caso eu não necessito que meus usuários tenham shell, nem home(porque quem tem home é boiola).
SHELLUSER="/bin/false"
HOMEUSER="/bin/false"

cat $ARQUIVO | while read USUARIO SENHA;
do
SHADOW=`perl senha.pl $SENHA`;
useradd $USUARIO -d $HOMEUSER -s $SHELLUSER -p $SHADOW
done

Paz a todos e inté.