Avatar billede foo_baa Nybegynder
23. juli 2002 - 14:04 Der er 13 kommentarer og
1 løsning

aktiv JButton

hvordan laver man en knap aktiv ??
Dvs. hvis man på et givet tidspunkt trykker på enter - så bruges den actionlistener der er til knappen ???
Avatar billede carstenknudsen Nybegynder
23. juli 2002 - 14:37 #1
Skal enter i et eller andet panel svare
til at knappen trykkes, og knappen kan
være hvorsomhelst?
Avatar billede foo_baa Nybegynder
23. juli 2002 - 14:40 #2
jeps
Avatar billede carstenknudsen Nybegynder
23. juli 2002 - 14:57 #3
Denne her skulle vist løse problemet.
public class MyKeyListener implements KeyListener {
private JButton button;
public MyKeyListener( JButton button ) {
    this.button = button;
}
    public void keyPressed(KeyEvent ke) {
    if ( ke.getKeyCode()==KeyEvent.VK_ENTER )
    button.doClick();
        }
public void keyReleased(KeyEvent ke){}
public void keyTyped(KeyEvent ke){}
}
Avatar billede carstenknudsen Nybegynder
23. juli 2002 - 14:58 #4
Du skal tilføje MyKeyListener til
det panel du vil have der skal lyttes
efter enter i, og konstruktoren til
MyKeyListener skal have den knap overført
som den skal trykke ned.
Avatar billede foo_baa Nybegynder
23. juli 2002 - 15:09 #5
altså lave en
MyKeyListener nyListener = new MyKeyListener(jbuttom);
?
Avatar billede foo_baa Nybegynder
23. juli 2002 - 15:09 #6
jbuttom = jbutton
Avatar billede foo_baa Nybegynder
23. juli 2002 - 15:12 #7
for så kompiler den godtnok men den den læser ikke om Enter er trykket
Avatar billede carstenknudsen Nybegynder
23. juli 2002 - 15:14 #8
Ja, og den skal så tilføjes der hvor
der skal lyttes til enter, f.eks.
i et JPanel.
JPanel panel = ...;
panel.addKeyListener( nyListener );
Avatar billede foo_baa Nybegynder
23. juli 2002 - 15:14 #9
ahhhhhh ok - det prøver jeg lige
Avatar billede foo_baa Nybegynder
23. juli 2002 - 15:50 #10
jeg må desværre sige at det ikke virker. dette er hvad jeg har gjort
JPanel panel = new JPanel();
....
....
MyKeyListener nyListener = new MyKeyListener(okButton);
panel.addKeyListener(nyListener);
såå ??
Avatar billede magoo20000 Nybegynder
23. juli 2002 - 20:13 #11
Det her virker glimrende!

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Gui extends JFrame implements KeyListener, ActionListener{

    private Container c;
    private JButton button = new JButton("KNAP");
    private JTextField field = new JTextField();
   
    public Gui(){
        c = getContentPane();
        c.setLayout(new XYLayout());
    //    button.addActionListener(this);
        button.addKeyListener(this);
        c.add(button, new XYConstraints(10, 10, 100, 100));
        c.add(field, new XYConstraints(150, 150, 200, 150));
        setSize(400,400);
        show();
    }
           
    public void keyTyped(KeyEvent k){}
   
    public void keyPressed(KeyEvent ke){
        if ( ke.getKeyCode()==KeyEvent.VK_ENTER )
              System.out.println( "HEJSA"+ke.getKeyCode() );
              field.setText("-->"+ke.getKeyCode() );
              button.doClick();
              System.out.println("HEJSA");
        }
           
    public void keyReleased(KeyEvent k){}
   
    public void actionPerformed(ActionEvent e){
        if (e.getSource()== button){
            System.out.println("!!Knap!!");
                field.setText("!!Knap!!");
        }
       
        }
   
    public static void main(String[] args) {
        new Gui();
       
    }   
}

Go fornøjelse ;-)
Avatar billede carstenknudsen Nybegynder
23. juli 2002 - 20:16 #12
Du skal ikke oprette et nyt panel du
skal bruge den komponent du ønsker
der skal lytte efter "enter".
Du kan ikke bare lytte efter det globalt,
det skal være "et sted", f.eks. et JPanel.
Jeg ved ikke hvilke komponenter du kommer
i en JFrame eller hvad du gør. Her er
et eksempel der illustrerer hvad der skal
gøres. Jeg bruger ovenstående MyKeyListener.

JFrame frame = new JFrame("Titel");
Container c = frame.getContentPane();
c.setLayout( new FlowLayout() );
JButton button = new JButton("Press me");
button.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent ae ) {
System.out.println("I was pressed!");
}
});
c.add( button );
JPanel panel = new JPanel();
JLabel label = new JLabel("This is a listening label.");
panel.add( label );
KeyListener listener = new MyKeyListener(button);
panel.addKeyListener(listener);
c.add(panel);
frame.pack();
frame.show();
Avatar billede carstenknudsen Nybegynder
23. juli 2002 - 20:30 #13
Lettere korrigeret version, her kan du
fysisk se at når du taster enter i
tekstfeltet trykkes knappen ned.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MyTest {
    private static class MyKeyListener implements KeyListener {
    private JButton button;
    public MyKeyListener( JButton button ) {
        this.button = button;
    }
    public void keyPressed(KeyEvent ke) {
        if ( ke.getKeyCode()==KeyEvent.VK_ENTER )
        button.doClick(250);
    }
    public void keyReleased(KeyEvent ke){}
    public void keyTyped(KeyEvent ke){}
    }   
    public static void main( String[] args ) {
    JFrame frame = new JFrame("My title");
    Container c = frame.getContentPane();
    c.setLayout( new FlowLayout() );
    JButton button = new JButton("Press me");
    button.addActionListener( new ActionListener() {
        public void actionPerformed( ActionEvent ae ) {}
        });
    c.add( button );
    JTextField text = new JTextField( 10 );
    KeyListener listener = new MyKeyListener(button);
    c.add( text );
    text.addKeyListener(listener);
    frame.pack();
    frame.show();   
    }
}
Avatar billede foo_baa Nybegynder
24. juli 2002 - 10:17 #14
kanon carstenknudsen>> det sidste eksempel - tændte lige et lys :)
takker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester