Avatar billede smedsmed Nybegynder
24. august 2004 - 20:19 Der er 15 kommentarer og
1 løsning

Hold en JButton "pressed"

Mit spørgsmål går på om det er muligt at holde en JButton nede/pressed – altså grafisk – efter man har trykket på den. Det jeg altså ønsker er selv at kunne vælge hvornår den igen skal visses som "ikke pressed".

Håber der er nogen der kan hjælpe mig...
Avatar billede _carsten Nybegynder
24. august 2004 - 20:57 #1
Jeg kan kun komme i tanker om metoderne doClick() og doClick(int pressTime)

Altså:

minJButton.doClick(5000);      // Holder knappen nede i 5 sekunder
Avatar billede smedsmed Nybegynder
24. august 2004 - 21:20 #2
Hmmm... Det er ikke helt det jeg leder efter da jeg har brug for at holde den nede endtil der sker en bestemt handling.

Men ellers tak for dit input :-)
Avatar billede _carsten Nybegynder
24. august 2004 - 21:30 #3
Så kan du jo lave din egen knap som overrider doClick() og tilføje en doReset() metode

public class MyButton extends JButton{
    public MyButton() {
    }
   
    public void doClick(int pressTime) {
        // hvis pressTime != 1 millisek, så kald superklasses doClick()
        if(pressTime == 1){
            Dimension size = getSize();
            model.setArmed(true);
            model.setPressed(true);
            paintImmediately(new Rectangle(0,0, size.width, size.height));
        }
        else
            super.doClick(pressTime);
    }
   
    public void doReset(){
        model.setPressed(false);
        model.setArmed(false);
    }
}
Avatar billede smedsmed Nybegynder
24. august 2004 - 21:44 #4
Det ligner virkelig noget jeg kan bruge! Men jeg tænkte på om man kunne lave det sådan at når man trykkede på knappe så blev den inde end til doReset er kaldt?
Avatar billede _carsten Nybegynder
24. august 2004 - 22:14 #5
Så skal du nok ind og have fat i knappens DefaultButtonModel

Jeg kigger på det i morgen, hvis du ikke selv finder løsningen
Avatar billede smedsmed Nybegynder
24. august 2004 - 22:18 #6
Det lyder virkelig fedt, hvis det kunne lade sig gøre. På forhånd tak.
Avatar billede smedsmed Nybegynder
25. august 2004 - 18:57 #7
Jeg kan ikke rigtig se hvordan jeg får fat i knappens DefaultButtonModel. Det ville være fedt, hvis du kunne vise mig et eksempel...
Avatar billede _carsten Nybegynder
25. august 2004 - 21:09 #8
Sorry - jeg har ikke haft tid til at kigge på det endnu, men jeg tror egentlig jeg fra starten har misforstået dit spørgsmål.

Du vil selv bestemme hvornår knappen skal vises som nedtrykket/op uanset om knappen udfører noget, i den situation er der en helt almindelig klasse til opgaven, og den hedder JToggleButton.

Du skal altså bare bruge javax.swing.JToggleButton i stedet for JButton !
Avatar billede _carsten Nybegynder
25. august 2004 - 21:21 #9
Har jeg ret ??
Avatar billede smedsmed Nybegynder
25. august 2004 - 21:21 #10
Jeg håber ikke det er for meget forlangt, men kunne jeg ikke få dig til at give mig et eksempel. Jeg kan ikke se hvordan JToggleButton skulle virke på den måde. Det andet du havde gang i var ellers tæt på at virke. Det jeg gerne vil have knappen til er at blive ned når jeg har trykket på den samt en metode man kan kalde på som for den til at gå op igen.
Avatar billede _carsten Nybegynder
25. august 2004 - 21:26 #11
Når du trykker knappen ned, bliver den nede indtil du trykker på den igen med musen

public class TestToggle extends javax.swing.JFrame {

    public TestToggle() {
        initComponents();
    }

    private void initComponents() {
        jToggleButton1 = new javax.swing.JToggleButton();

        getContentPane().setLayout(new java.awt.FlowLayout());

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jToggleButton1.setText("jToggleButton1");
        getContentPane().add(jToggleButton1);

        pack();
    }

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }

    public static void main(String args[]) {
        new TestToggle().show();
    }

    private javax.swing.JToggleButton jToggleButton1;   
}
Avatar billede _carsten Nybegynder
25. august 2004 - 21:29 #12
Glemte det med metoden, her kan du styre jToggleButton1 med jButton1

public class TestToggle extends javax.swing.JFrame {
   
    public TestToggle() {
        initComponents();
    }
   
    private void initComponents() {
        jToggleButton1 = new javax.swing.JToggleButton();
        jButton1 = new javax.swing.JButton();

        getContentPane().setLayout(new java.awt.FlowLayout());

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jToggleButton1.setText("jToggleButton1");
        getContentPane().add(jToggleButton1);

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                op(evt);
            }
        });

        getContentPane().add(jButton1);

        pack();
    }

    private void op(java.awt.event.ActionEvent evt) {
        jToggleButton1.doClick();
    }
   
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
   

    public static void main(String args[]) {
        new TestToggle().show();
    }

    private javax.swing.JButton jButton1;
    private javax.swing.JToggleButton jToggleButton1;   
}
Avatar billede smedsmed Nybegynder
25. august 2004 - 21:44 #13
Det ser virkelig godt ud! En sidste detajle... Vil det kunne lade sig gøre at jToggleButton1 blev nede selvom man trykkede på den igen?
Avatar billede _carsten Nybegynder
25. august 2004 - 22:17 #14
Ja - jeg kan bare ikke lige gennemskue bedste/nemmeste måde at gøre det på, måske er det nemmeste at checke for museklik og om knappen er valgt ( isSelected() )
Avatar billede smedsmed Nybegynder
26. august 2004 - 01:25 #15
Så virker det endlig efter mange timer! Vil du ikke lave et svar så jeg kan give dig dine points?

Mange tak for hjælpen!
Avatar billede _carsten Nybegynder
21. september 2004 - 16:55 #16
Svar
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