quarta-feira, 15 de julho de 2009
Pegar clique e setas do teclado na jTable
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
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
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)
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
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 = {"
public modeloTabUsuario(Collection l){
datalist.addAll(l);
}
public modeloTabUsuario(){
}
public void addUsuarios(Usuarios usu){
datalist.add(usu);
fireTableDataChanged();
}
public void addListUsuarios(Collection
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("
}
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
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
++++++++++++++++++++++++++++++++++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
Crie um DefaultListModel e adicione no jList.
listaModel = new DefaultListModel( );
jList1.setModel( listaModel );
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.
}
}