Mostrando postagens com marcador swing. Mostrar todas as postagens
Mostrando postagens com marcador swing. Mostrar todas as postagens

quarta-feira, 15 de julho de 2009

Pegar clique e setas do teclado na jTable

Para nós podermos pegar ambos os comandos tanto de teclado como de mouse, já vi várias implementações, mas a melhor que eu achei é essa:

gridproduto.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

public void valueChanged(ListSelectionEvent e) {
if (gridproduto.getSelectedRow() != -1) {
prod = modelo.getTprodutos(gridproduto.getSelectedRow());
System.out.println(prod.getNome());
}
});

Pelo simples fato desse método ser chamado somente quando a seleção mudar na jTable. Mas como nada é perfeito temos um probleminha nessa implementação, quando é utilizado o mouse para selecionar outra célula da jTable o código é executado duas vezes.

quinta-feira, 18 de junho de 2009

Carregando um Look and Feel

Quando estamos desenvolvendo sistemas desktops podemos utilizar diferentes L&F, por isto estarei postando aqui um código de como carregar um L&F de maneira bem simples e mostrando para quem nunca trabalhou com isso, uma forma simples e rápida de listar todos os L&F existentes na versão do Java existente em seu computador:

try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception ex) {
JOptionPane.showMessageDialog(null,
"Problems to change L&F. "+ex,
"ERRO",
JOptionPane.ERROR_MESSAGE);
}

Neste exemplo eu faço um laço passando por todos os L&F, caso possua o L&F Nimbus eu seto ele e caio fora do laço.

quinta-feira, 2 de abril de 2009

jTextfield receber so números

Uma boa pratica é fazer a verificação dos dados já na view. Isso deixa o processo mais rápido, pois o usuário já esta vendo o que esta fazendo de errado, ou se esta esquecendo de alguma coisa. Nesse pequeno código estamos testando se o usuário está digitando a coisa correta caso contrario não permitimos a escrita. Criamos um addKeyListener, (keyTyped):

private void txtsenhaKeyTyped(java.awt.event.KeyEvent evt) {

char c = evt.getKeyChar() ;

if (! ((c==KeyEvent.VK_BACK_SPACE) ||

(c==KeyEvent.VK_DELETE) || (c== KeyEvent.VK_ENTER) ||

(c == KeyEvent.VK_TAB) || (Character.isDigit(c)))) {

evt.consume() ;

}

}

quinta-feira, 19 de março de 2009

Efeitos em jLabel

Não gosto muito dos jButtons do swing, então resolvi utilizar as jLabels como botões, para isso criei alguns efeitos nas jLabels, achei melhor criar uma única classe, para que ao alterar a mesma todos os meus botões sofressem a mudança. Para isso criei uma classe bem simples e estou postando aqui caso alguém também resolva fazer algum efeito em jLabels, eu altero a cora da fonte a cor do fundo e a borda da jLabel.

import java.awt.Color;
import java.awt.Cursor;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.border.Border;

/**
*
* @author homisinho
*/
public class EfeitosV {
//Cor da fonte quando entra em botao
protected static Color fonteButtonEntered = new Color(0, 0, 0);
//Cor da fonte quando sai em botao
protected static Color fonteButtonExited = new Color(3, 103, 213);
//Cor do background entra em botao
protected static Color BackgButtonEntered = new Color(204, 204, 204);
//Cor do background sai em botao
protected static Color BackgButtonExited = new Color(214, 217, 223);
//Borda entra botao
protected static Border BordaButtonEntered = BorderFactory.createLineBorder(new Color(0,0,0));
//Borda sai botao
protected static Border BordaButtonExited = BorderFactory.createLineBorder(new Color(214,217,223));


public static JLabel getButtonEfectEntered(JLabel lbl){
if (lbl.isEnabled()) {
lbl.setForeground(fonteButtonEntered);
lbl.setBackground(BackgButtonEntered);
lbl.setBorder(BordaButtonEntered);
}
return lbl;
}

public static JLabel getButtonEfectExited(JLabel lbl){
if (lbl.isEnabled()) {
lbl.setForeground(fonteButtonExited);
lbl.setBackground(BackgButtonExited);
lbl.setBorder(BordaButtonExited);
}
return lbl;
}


}

Mascara para IP (com ER)

Estava eu procurando uma forma de criar uma mascara em um jtextfield, para certificar que o usuário digitou um IP válido. Depois de muita procura no google, encontrei um exemplo que utiliza expressões regulares para testar o valor digitado pelo usuário.
Para isso coloque um jFormattedTextfield em um jFrame qualquer crie a seguinte classe:

import java.text.ParseException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import javax.swing.text.DefaultFormatter;

/**
*
* @author homisinho
*/
public class RegexFormatter extends DefaultFormatter {
private Pattern pattern;
private Matcher matcher;

public RegexFormatter() {
super();
}

public RegexFormatter(String pattern) throws PatternSyntaxException {
this();
setPattern(Pattern.compile(pattern));
}

public RegexFormatter(Pattern pattern) {
this();
setPattern(pattern);
}

public void setPattern(Pattern pattern) {
this.pattern = pattern;
}

public Pattern getPattern() {
return pattern;
}

protected void setMatcher(Matcher matcher) {
this.matcher = matcher;
}

protected Matcher getMatcher() {
return matcher;
}

@Override
public Object stringToValue(String text) throws ParseException {
Pattern pattern = getPattern();

if (pattern != null) {
Matcher matcher = pattern.matcher(text);

if (matcher.matches()) {
setMatcher(matcher);
return super.stringToValue(text);
}
throw new ParseException("Pattern did not match", 0);
}
return text;
}

}


E coloque o seguinte código em seu jFrame para utilizar a expressão regular:

///expressão regular para controlar o IP valido
String _255 = "(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)";
Pattern p = Pattern.compile("^(?:" + _255 + "\\.){3}" + _255 + "$");
RegexFormatter ipFormatter = new RegexFormatter(p);
txtip.setFormatterFactory(new DefaultFormatterFactory(ipFormatter));
/////////////////////////////////////////


No lugar de “txtip” coloque o nome do seu jFormattedTextfield. Encontrei esse exemplo no site http://www.gamedev.net, caso tenha dúvidas com expressões regulares de uma procurada no google.

quinta-feira, 15 de janeiro de 2009

Opções da jTable

Vou colocar algumas opções importantes da jTable.
Vamos começar com a largura das células, pra terminar com os ... no final das strings, pelo menos da maioria, pois caso a string seja grande mesmo, com múltiplas linhas, seria necessário a utilização de html ou implementar um jTextArea. Essa linha simplesmente possibilita a alteração da largura da coluna:

jTable1.getColumnModel().getColumn(n).setPreferredWidth(m);

n = coluna da tabela ‘inicia em 0 ’;
m = largura em px da coluna;

Também podemos configurar a altura das linhas da tabela:

jTable1.setRowHeight(m);

m= altura em px das linhas;

Outra opção importante é a reordenação das colunas, caso você tenha implementado um renderer e no mesmo você utilizou a variável column a reordenação feita pelo usuário se tornaria um problema. Podemos bloquear a reordenação das colunas:

jTable1.getTableHeader().setReorderingAllowed(false);


Também podemos bloquear a alteração da largura das colunas:

jTable1.getTableHeader().setResizingAllowed(false);

quinta-feira, 8 de janeiro de 2009

Utilizando jxTable do swingx



Após instalar os componentes do swingx fiz alguns testes, e fiquei quebrando a cabeça na utilização do jxTaskpane e jxTable.

São componentes visuais muito legais e que já facilitam um pouco a vida do programador.

Criei uma classe modeloTabUsuario que extendia AbstractTableModel, o problema que mais demorei pra resolver foi uma falha de digitação no método que sobrescrevia getColumnName, pois os nomes das colunas da minha jxtable ficava com as letras do alfabeto. Segue a classe de teste criada por mim:



public class modeloTabUsuario extends AbstractTableModel{

private ArrayList datalist = new ArrayList();

private String[] columns = {"Nome","Login","Tipo"};

public modeloTabUsuario(Collection l){

datalist.addAll(l);

}

public modeloTabUsuario(){

}

public void addUsuarios(Usuarios usu){

datalist.add(usu);

fireTableDataChanged();

}

public void addListUsuarios(Collection list){

datalist.addAll(list);

fireTableDataChanged();

}

public Usuarios getUsuario(int rows){

if (getRowCount() >= rows ){

return (Usuarios) datalist.get(rows);

}else return null;

}

@Override

public String getColumnName(int col){

return columns[col];

}

public String[] getColumns(){

return columns;

}

@Override

public Class getColumnClass(int c) {

return getValueAt(0, c).getClass();

}

public int getRowCount() {

return datalist.size();

}

public int getColumnCount() {

return columns.length;

}

public Object getValueAt(int rowIndex, int columnIndex) {

Usuarios usu = getUsuario(rowIndex);

switch (columnIndex) {

case 0:

return usu.getNome();

case 1:

return usu.getLogin();

case 2:

int tp = usu.getTipo();

if(tp == 0){

return new String("Restrito");

}

if(tp == 1){

return new String("Normal");

}

if(tp == 2){

return new String("Supervisor");

}

if(tp == 3){

return new String("Empresa");

}

default:

return null;

}

}

}

Nos testes ate agora tudo certo com o swingx, acredito que irei utilizar o mesmo nas minhas aplicações futuras.


quarta-feira, 18 de junho de 2008

GET e SET das variáveis no Netbeans

Criar os métodos GET e SET das variáveis no Netbeans é muito fácil.

Clique com o botão direito do mouse e va na opção “Encapsulate fields..”, ira abrir uma janela :

Marque tanto os Getters e os Setters das variáveis que você deseja e clique em Refactor. A IDE Netbeans irá criar automaticamente para você.

terça-feira, 18 de março de 2008

Utilizando um Timer

Criei esses dias uma classe para auxiliar na utilização de alguns timers, com ela eu vou poder dar stop e play para abilitar ou desabilitar um timer.


import java.util.Timer;
import java.util.TimerTask;

/**
*
* @author homisinho
*/
public class ControlTime {
Timer timer;
boolean Estado;
int Delay;
int Time;
/**
*
* @param func type TimerTask Function to be executed;
* @param d Time before running timer, in second;
* @param t Time to run, in second;
*/
public ControlTime(int d,int t) {
Estado=false;
Delay = d;
Time = t;
}

public void Stop(){
timer.cancel();
Estado = false;
}

public void Play(TimerTask func){
timer = new Timer();
timer.schedule(func,Delay*1000, Time*1000);
Estado = true;
}
/**
*
* @return if time is in use;
*/
public boolean getState(){
return(Estado);
}
}

Para utilizar basta criar o objeto da classe:

public ControlTime tmr_2 = new ControlTime(60, 60);

E depois criar o timetask e passar como parametro:

TimerTask tt = new TimerTask() {
public void run() {
getDados(eq);///metodo qualquer q vc quer q execute
}
};
tmr_2.Play(tt);

E depois pra parar:

tmr_2.Stop();


quarta-feira, 12 de março de 2008

ParallelPort no Netbeans 6

Tive problemas ao utilizar o ParallelPort no Netbeans 6, na realidade o Netbeans acusa um erro mas a comunicação com a porta parelela funciona da mesma forma. Postei minha dificuldade no GUJ e até o presente momento não fui respondido. estou postando aqui o q eu coloquei no GUJ, a fim de compartilhar esse conhecimento.

++++++++++++++++++++++++++++++++++GUJ+++++++++++++++++++++++++++++
Pessoal estou com um problema na utilização da ParallelPort....
Na versão 5.5 do netbeans estava funcionando blz....
Quando instalei o netbeans 6

Product Version: NetBeans IDE 6.0 (Build 200711261600)
Java: 1.6.0_02; Java HotSpot(TM) Client VM 1.6.0_02-b05
System: Windows XP version 5.1

e abri o mesmo projeto q funcionava no netbeans 5.5 agora acusa um erro...

"package parport does not exist" no import parport.ParallelPort;

mas me certifiquei de ter colocado o arquivo parport.dll junto a pasta jre1.6.0_02/bin e na jre1.6.0_03/bin

e tbm coloquei a pasta "parport" com o arquivo "ParallelPort.class" dentro da pasta build/classes/ do meu project.

Alguem ja utilizou o parallelPort no netbeans 6 ???
Alguem tem alguma idéia do q possa estar acontecendo?


===================================================================

O Netbeans acusa o erro na linha do import....

import parport.ParallelPort;

o erro é: "package parport does not exist"

Mas a comunicação com a porta paralela funciona!
Acredito que o Netbeans acuse esse erro pq não existe a seguinte pasta e arquivo:

/src/parport/ParallelPort.java

somente coloquei dentro de

/build/classes/parport/ParallelPort.class


Estou certo?
Isto não irá trazer problemas ao meu sistema?

sexta-feira, 29 de fevereiro de 2008

Utilisando um jList

Na sua aplicação crie um jList. Nome padrão jList1.

Crie um DefaultListModel e adicione no jList.

listaModel = new DefaultListModel( );

jList1.setModel( listaModel );

Para adicionar itens na lista você deve adicionar elementos no listaModel criado.

listaModel.addElement( new String("ITEM 01"));

segunda-feira, 14 de janeiro de 2008

Códigos em JAVA

Olha pessoal nos próximos posts vou tentar fazer em forma de artigo, mas como eu somente vou postar aqui alguns códigos que eu utilizei em Java,não há necessidade de explicar cada um.... já vou falando desde agora que sou iniciante em Java e esses códigos foram todos testados, todos eles eu utilizei em alguns testes que eu fiz.....espero q ajude um pouco....


Este post sempre será atualizado com pequenos códigos que eu utilizo, claro q por enquanto estou parado na programação Java, mas logo retomarei meus testes.


DECLARAÇÕES

int tabela[] = {0x0000,0xC0C1,0xC181};///vetor hexadecimal

javax.swing.JCheckBox[] meuArray; ///vetor de componente checkbox

int[] dados = new int[1344];//vetor de inteiros


Limpa Vetor

Arrays.fill(dados,0);///limpa vetor...

Mensagens

JOptionPane.showMessageDialog(this,"A opção escolhida foi: "+”o q mais vc colocar”);

Necessita a biblioteca

import javax.swing.JOptionPane;

String opcao[] = {"Sim","Não"};

int resposta = JOptionPane.showOptionDialog(null,

"Os seguintes dados não poderão ser carregados da memória:\n DEMANDA CONTRATADA,\n MULTIPLICADORES, \n COEFICIENTE.\n\n Deseja limpar os campos de texto?",

"LIMPAR CAMPOS?",

JOptionPane.YES_NO_OPTION,

JOptionPane.QUESTION_MESSAGE,

null,

opcao,

opcao[0]);

if (resposta == JOptionPane.YES_OPTION){

jTextField2.setText("");

jTextField3.setText("");

jTextField4.setText("");

jTextField5.setText("");

jTextField6.setText("");

}

jComboBox

jComboBox3.setSelectedIndex(1); - seleciona o item da lista

jComboBox3.addItem("teste1"); - adicionando novos itens ao combobox

(String)jComboBox3.getSelectedItem(); - retorna o texto do item selecionado no combobox

jComboBox3.getSelectedIndex(); - retorna o index selecionado c nenhum selecionado retorna -1

Cursor

Cursor cursor = Cursor.getPredefinedCursor( Cursor.WAIT_CURSOR );

component.setCursor( cursor );

////////////////////////////////////////////////////////////////////////////////////////////////

cursor = Cursor.getDefaultCursor();

component.setCursor( cursor );

Bordas e Background

jButton1.setBorder(BorderFactory.createLineBorder(new java.awt.Color(255, 255, 255),1));

jButton1.setBackground(new java.awt.Color(255, 255, 255));

Hint

buttonAlterar.setToolTipText("Texto");

Converter STRING to INT

String.valueOf(teste); //escreve string e coloca o . ai da ctrl espaço e v as opções de converção...

Arredondando/truncando Float

Math.round (0.5);

hi = Math.trunc(1.5);

hi = (int)(aux/256);

Formatando float

DecimalFormat decimal = new DecimalFormat( "0.00" );
System.out.println( decimal.format( 3.7691231233 ) );
 
Math.rint();


ICONE

Image icon =Toolkit.getDefaultToolkit().getImage(getClass().getResource("/imagens/ico.gif"));

setIconImage(icon);

CENTRALIZAR FRAME NO MEIO DA TELA

“nome do frame criado” .setLocationRelativeTo(null);

Trabalhando com ARQUIVOS

Escrevendo

FileWriter out = new FileWriter("dados.cew");

PrintWriter saida = new PrintWriter(out,true);

saida.println(“teste”);

saida.close();

out.close();

Lendo

FileReader reader = new FileReader("dados.cew");

BufferedReader leitor = new BufferedReader(reader);

jTextField1.setText(leitor.readLine());

leitor.close();

reader.close();

Testando ERROS (TRY)

Passando erro para a classe mãe

public insereNome(String nome)  throws SQLException {
    Statatement stmt = conn.createStatement();
    stmt.executeUpdate("INSERT INTO Nomes(nome) VALUES('" + nome + "')");
    stmt.close();
 }

Passando erro para a classe mãe JÁ TRATADO.

public insereNome(String nome)  throws FalhaAoInserirNomeException {
    try {
         Statatement stmt = conn.createStatement();
         stmt.executeUpdate("INSERT INTO Nomes(nome) VALUES('" + nome + " ')");
         stmt.close();
    } catch (SQLException e) {
      throw new FalhaAoInserirNomeException("Não foi possível inserir o nome " + nome, e);
      //Note que o segundo parâmetro é a exceção lançada. 
      //É uma boa prática anexar a causa na exceção reescrita.
    }
 }