Criar um JTextarea no teclado virtual

3 respostas
java
C

Boa tarde Galera,

Estou com uma dificuldade tremenda em fazer uma Jtextarea para receber os textos pelo teclado virtual.
Alguém teria como dar uma luz? Pois queria que o teclado ficasse desta forma abaixo.

teclado%20virtual

Já tenho parte do teclado feito, segue o código, em cima deste o que posso fazer?

Classe principal.

import java.awt.Dimension;

import java.awt.GridLayout;

import java.awt.event.FocusEvent;

import java.awt.event.FocusListener;

import javax.swing.*;

public class Principal extends JFrame{

JTextField txtusu=new JTextField(10);

JPasswordField txtsenha=new JPasswordField(10);

JPopupMenu pop;

JKeyboardPane teclado;

public Principal(){

colocarSkin();

JPanel janela=new JPanel();

JPanel p=new JPanel(new GridLayout(2,2,0,0));

janela.setPreferredSize(new Dimension(200,30));

p.add(new JLabel("Usuario: "));

p.add(txtusu);

p.add(new JLabel("Senha: "));

p.add(txtsenha);

txtsenha.addFocusListener(new FocusListener(){

<a class="mention" href="/u/override">@Override</a>

public void focusGained(FocusEvent arg0) {

pop = new JPopupMenu();

teclado=new JKeyboardPane(txtsenha);

pop.add(teclado);

pop.setVisible(true);

pop.setLocation(txtsenha.getLocationOnScreen().x+112, txtsenha.getLocationOnScreen().y-1);

}
<a class="mention" href="/u/override">@Override</a>

public void focusLost(FocusEvent arg0) {

pop.setVisible(false);

}

});
txtusu.addFocusListener(new FocusListener(){

<a class="mention" href="/u/override">@Override</a>

public void focusGained(FocusEvent arg0) {

pop = new JPopupMenu();

teclado=new JKeyboardPane(txtusu);

pop.add(teclado);

pop.setVisible(true);

pop.setLocation(txtsenha.getLocationOnScreen().x+112, txtsenha.getLocationOnScreen().y-1);

}
<a class="mention" href="/u/override">@Override</a>

public void focusLost(FocusEvent arg0) {

pop.setVisible(false);

}

});

janela.add§;
add(janela);

}

public void colocarSkin(){

try {

UIManager.setLookAndFeel(com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel);

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (InstantiationException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (UnsupportedLookAndFeelException e) {

e.printStackTrace();

}

}
public static void main(String arg[]){

Principal p=new Principal();

p.setVisible(true);

p.setBounds(0, 0, 300, 200);

p.setLocationRelativeTo(null);

p.setDefaultCloseOperation(EXIT_ON_CLOSE);

}

}

JKeyboardPane

import java.awt.BorderLayout;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.ArrayList;

import javax.swing.*;

public class JKeyboardPane extends JPanel{

JTextField txt;

String teclas[]={1,2,3,4,5,6,7,8,9,0,Q,W,E,R,T,

Y,U,I,O,P,A,S,D,F,G,H,J,K,L,Ñ,Z,X,C,

V,B,N,M,"."};

ArrayList botoes=new ArrayList();

JPanel pletras,pespaco;

public JKeyboardPane(JTextField t){

txt=t;

pletras=new JPanel();

setLayout(new BorderLayout());

pletras.setLayout(new GridLayout(4,10,0,0));

ActionListener accion=new ActionListener(){

<a class="mention" href="/u/override">@Override</a>

public void actionPerformed(ActionEvent e) {

JButton b=(JButton)e.getSource();

if(!b.getText().equalsIgnoreCase(" “)){

txt.setText(”"+txt.getText()+b.getText());

}else{

txt.setText(txt.getText()+" ");

}

}

};

for(int i=0;i<37;i++){

if(teclas[i].equalsIgnoreCase(Z)){

JLabel l=new JLabel();

pletras.add(l);

}

JButton b=new JButton(teclas[i]);

b.addActionListener(accion);

pletras.add(b);

botoes.add(b);

}
pespaco=new JPanel(new GridLayout(1,3));

JButton bespacio=new JButton(" ");

bespacio.addActionListener(accion);

pespaco.add(new JLabel());

pespaco.add(bespacio);

pespaco.add(new JLabel());

add(pletras);

add(pespaco,BorderLayout.SOUTH);

}

}

3 Respostas

D

Especifique, de maneira clara e objetiva, qual a dificuldade.
No meu entender, basta programar esse componente e inserí-lo no espaço em que ele deve ficar. Para aparecer o que foi digitado, basta alterar os comportamentos definidos para cada tecla.

C

@darlan_machado O que eu qeria não poderia ser feito da forma passada. Então estou tentando de outra forma usando o JFrame. Que tbm estou com outra dúvida que irei postar daqui a pouco. Mas mt obrigado

D

Isso não é nem um pouco esclarecedor, não deixa claro por que não pode ser feito da forma passada.

Criado 9 de maio de 2019
Ultima resposta 13 de mai. de 2019
Respostas 3
Participantes 2