Iae galera…
estou criando um teclado numérico virtual para minha aplicação java swing…
só que estou encontrando dificuldades em 2 pontos
1º como faço para que o sistema pressione a tecla enter quando o usuário clicar no botão enter do teclado virtual?
2º tenho um jbutton dentro do jtextfield com uma imagem de um teclado … esse botão chama o teclado virtual que por sua vez escreve no jtextfield… porém conforme o texto vai crescendo dentro do campo os dígitos ficam atras do botão ou seja, estão escondidos atras do botão … como eu poderia fazer para que quando o texto se aproximasse do botão ele não passar por traz do botão e sim ir continuando o texto como se o campo terminasse onde começa o botão?
segue o codigo que fiz para o teclado virtual:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
/**
*
* @author Visitante
*/
public class TecladoVirtual extends JPanel{
private JTextField txt;
private String[] teclas = {"7", "8", "9", "4", "5", "6", "1", "2", "3", "0", ",", "←"};
private ArrayList<JButton> botoes = new ArrayList<JButton>();
private JPanel pNumeros, pEnter;
private JPopupMenu pop;
private ImageIcon icone;
private JButton botao;
public TecladoVirtual() {};
public JTextField getTecladoNumerico(JTextField t) {
txt = t;
configuraCampoNumerico();
return txt;
}
private void configuraCampoNumerico() {
configuraBotaoNumerico();
pNumeros = new JPanel();
setLayout(new BorderLayout());
pNumeros.setLayout(new GridLayout(4, 3, 0, 0));
ActionListener acao = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JButton b = (JButton)e.getSource();
if (!b.getText().equalsIgnoreCase("Enter") && !b.getText().equalsIgnoreCase("←")) {
txt.setText(""+txt.getText()+b.getText());
} else if (b.getText().equalsIgnoreCase("←")) {
txt.setText(txt.getText().length() > 0 ? ""+txt.getText().substring(0, txt.getText().length() - 1) : "");
} else {
txt.requestFocus();
pop.setVisible(false);
}
}
};
for(int i = 0; i < teclas.length; i++) {
JButton b = new JButton(teclas[i]);
b.addActionListener(acao);
pNumeros.add(b);
botoes.add(b);
}
pEnter = new JPanel(new GridLayout(1, 3, 0, 0));
JButton bEnter = new JButton("Enter");
bEnter.addActionListener(acao);
pEnter.add(bEnter);
}
private void configuraBotaoNumerico() {
icone = new ImageIcon(getClass().getResource("/cpadivisual/imagem/teclado.png"));
botao = new JButton(icone);
botao.setBackground(new Color(0, 0, 0, 0));
botao.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Component parent = ((JButton)e.getSource()).getParent();
((JTextField)parent).requestFocus();
pop = new JPopupMenu();
pop.add(pNumeros);
pop.add(pEnter, BorderLayout.SOUTH);
pop.setVisible(true);
pop.setLocation(txt.getLocationOnScreen().x+112, txt.getLocationOnScreen().y-1);
}
});
txt.setLayout(new BorderLayout());
txt.add(botao, BorderLayout.EAST);
}
}
agora o codigo de chamada do teclado:
TecladoVirtual teclado = new TecladoVirtual();
textFieldVirtualKey = teclado.getTecladoNumerico(textFieldVirtualKey);
desde já agradeço a ajuda!!