KeyEvent (geen extra text)

Status
Niet open voor verdere reacties.

fvdstarre

Gebruiker
Lid geworden
1 mrt 2007
Berichten
25
Ik heb een stuk code gemaakt, waardoor er automatisch uit een aantal comboboxen data wordt gegenereerd via een toetscombinatie. Dit werkt goed, alleen wanneer ik extra text wil typen, gebeurd er niets. Hij verwijdert mijn ingevoegde text meteen en behoudt alleen de gegenereerde text.

Code:
        contentPane.add(txtVoortgang);
        txtVoortgang.setBounds(90, 225, 410, 150);
        txtVoortgang.addKeyListener( new GUI());

Code:
    public class GUI implements KeyListener{
    
    public void keyTyped(KeyEvent e) {
        if( e.getKeyCode()==17+72);
    }

    public void keyPressed(KeyEvent e) {}

    public void keyReleased(KeyEvent e) {
        
        String Status;
        String Snelnaam;
        Status = (String) cbStatus.getSelectedItem();
        Snelnaam = (String) cbSnelnaam.getSelectedItem();
        String Datum = txtDatum.getText();
        String Tijd = txtTijd.getText();
    
        txtVoortgang.setText("<" + Status + " " + Snelnaam + " " + Datum + " " + Tijd + ">");
        }
    }
 
In het tekstvak txtVoortgang waar de KeyListener ook in gebeurd.

Ik wil dus een soort status regeltje hebben en daaronder (in hetzelfde tekstvak txtVoortgang) een uitleg geven.
 
Dat klopt wel.
Want elke keer als je iets typt en de knop loslaat(keyReleased).. Dan wordt hetgene wat in de andere boxes staat gekopiëert naar txtVoortgang

Doe het eens zo:

Code:
    public class GUI implements KeyListener{
    
    public void keyTyped(KeyEvent e) {
        if( e.getKeyCode()==17+72){
            String Status;
            String Snelnaam;
            Status = (String) cbStatus.getSelectedItem();
            Snelnaam = (String) cbSnelnaam.getSelectedItem();
            String Datum = txtDatum.getText();
            String Tijd = txtTijd.getText();
    
            txtVoortgang.setText("<" + Status + " " + Snelnaam + " " + Datum + " " + Tijd + ">");
       }
    }

    public void keyPressed(KeyEvent e) {}

    public void keyReleased(KeyEvent e) {}
    }
 
Laatst bewerkt:
Daarmee bedoelde ik dat ik nu wel gewoon kan typen in het textvak, maar het KeyEvent doet het niet meer.
 
Je hebt nu:
Code:
if( e.getKeyCode()==17+72)

Dus elke keer dat je de Hoofdletter Y (als ik het nog goed weet) intypt wordt dit uitgevoerd

Want het is niet handig om elke keer dat er op het formulier maar 1 key getypt wordt, zoals eerst had, het meteen uit te voeren. Want dan kan je niets aanpassen in de txtVoortgang.

Wat je kan doen is een combinatie van een KeyTyped en bijvoorbeeld een CTRLDown of een ALTDown.
Dan moet je en een de CTRL ingedrukt hebben en een letter intypen.

Uitleg over CTRlDown en ALTDown kan je hier vinden:
http://www.sra.co.jp/people/nisinaka/Jun4Java/JavaDoc/jp/co/sra/smalltalk/StInputState.html
 
Laatst bewerkt:
17 = CTRL
71 = H

Ik wil op CTRL+H drukken om een statusberichtje te laten zien. Ik probeerde eerst alleen de CTRL en toen gebeurde precies hetzelfde. Nu blijkt het dat op welke knop ik ook druk, het Key Event wordt uitgevoerd.

Als ik je goed begrijp is dit precies wat ik probeer te doen? :)
 
Wat jij doet is een getal optellen.
Eigenlijk doe jij
Code:
if( e.getKeyCode()==89)
Want de 17 + 72 doet hij eerst en dan de vergelijking.

Dan zou je zoiets kunnen doen:
Code:
if( e.getKeyCode()==72 and CTRLDown())

ik doe het nu zonder IDE, dus ik ben er niet compleet zeker van dat het meteen werkt.
 
Ik heb van alles geprobeerd met CTRLDown, maar het lukt nog steeds niet.
 
fvdstarre (leuke naam hoor) en ik zijn er inmiddels uit.

Code:
        contentPane.add(txtVoortgang);
        txtVoortgang.setBounds(90, 225, 410, 150);
        txtVoortgang.addKeyListener( new GUI());

Hieronder de foutieve code
Code:
public class GUI implements KeyListener{
    
    public void keyTyped(KeyEvent e) {
        if( e.getKeyCode()==17+72);
    }

    public void keyPressed(KeyEvent e) {}

    public void keyReleased(KeyEvent e) {
        
        String Status;
        String Snelnaam;
        Status = (String) cbStatus.getSelectedItem();
        Snelnaam = (String) cbSnelnaam.getSelectedItem();
        String Datum = txtDatum.getText();
        String Tijd = txtTijd.getText();
    
        txtVoortgang.setText("<" + Status + " " + Snelnaam + " " + Datum + " " + Tijd + ">");
        }
    }

Hieronder dus de goede code.
Code:
public class GUI implements KeyListener{
    
    public void keyTyped(KeyEvent e) {
    }

    public void keyPressed(KeyEvent e) {
        if( e.getKeyCode()==119)    //we hebben voor F8 gekozen
        {

        String Status;
        String Snelnaam;
        Status = (String) cbStatus.getSelectedItem();
        Snelnaam = (String) cbSnelnaam.getSelectedItem();
        String Datum = txtDatum.getText();
        String Tijd = txtTijd.getText();
    
        txtVoortgang.setText("<" + Status + " " + Snelnaam + " " + Datum + " " + Tijd + ">");

        }
    }

    public void keyReleased(KeyEvent e) 
    {
       
    }
}

Best logisch weer natuurlijk :)

Alleen helaas, nog een probleem komen we hiermee tegen. Als we nu dus in de TextArea op F8 drukken, word alle inhoud van de TextArea gewist en vervangen door de inhoud van variabele F8. Hoe zorgen we ervoor dat de inhoud word bijgevoegd in plaats van vervangt?

Alvast bedankt!
 
Laatst bewerkt:
Eerst de huidige text getten en in een variabele zetten.
Vervolgens variabelen samenvoegen en dan in de textarea zetten.
Kortste manier zou denk ik zijn:
Code:
txtVoortgang.setText(txtVoortgang.getText() + "<" + Status + " " + Snelnaam + " " + Datum + " " + Tijd + ">");
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan