Avatar billede drengel0ven Nybegynder
18. marts 2003 - 17:41 Der er 18 kommentarer og
1 løsning

Bestem hvor cursoren står og blinker ved opstart?

Hej

Jeg har lavet en GUI i JAVA.

Jeg har et JTextField, som cursoren automatisk skal stå klar og blinke i ved opstart af programmet.

Jeg har set lidt på focus funktionerne, men kan ikke få dem til at virke.

Lidt hjælp ville være super!
Avatar billede viht Nybegynder
18. marts 2003 - 18:58 #1
Du skal bruge en WindowListener for at opnå hvad du søger. Se dette eksempel:

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

public class TestFrame extends JFrame {
   
    public TestFrame() {
        super("Test");
        setSize(400,400);
       
        final JTextArea area1 = new JTextArea();
        final JTextArea area2 = new JTextArea();
       
        JSplitPane split = new JSplitPane(    JSplitPane.HORIZONTAL_SPLIT,
                                                        new JScrollPane(area1),
                                                        new JScrollPane(area2)
                                                    );
        getContentPane().add(split, BorderLayout.CENTER);
       
        JPanel buttonPanel = new JPanel();
        JButton closeButton = new JButton("Luk");
        closeButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                System.exit(0);
            }
        });
        buttonPanel.add(closeButton);
        getContentPane().add(buttonPanel, BorderLayout.SOUTH);
       
        addWindowListener(new WindowAdapter() {
            public void windowOpened(WindowEvent event) {
                area2.requestFocus();
                area2.append("Area2 har fokus");
            }
            public void windowClosing(WindowEvent event) {
                System.exit(0);
            }
        });
    }
}
class Go {
    public static void main(String[] args) {
      new TestFrame().show();
  }
}
Avatar billede repsak Nybegynder
18. marts 2003 - 20:05 #2
Det er ikke nødvendigt at benytte listeneren! Følgende burde være nok hvis du placerer det der hvor du initialiserer...

void opretTextfield(){
  panel.add(textfield);
  textfield.requestFocus();
}
Avatar billede viht Nybegynder
18. marts 2003 - 20:08 #3
Det er det bare desværre ikke :)
Fokus rekalkuleres ved runtime, altså når vinduet vises.
Avatar billede repsak Nybegynder
18. marts 2003 - 20:17 #4
Det forstår jeg sgu ikke... Har selv skrevet et program hvor det virker fint...
Avatar billede viht Nybegynder
18. marts 2003 - 20:18 #5
Prøv mit ovenstående eksempel i denne versionm, så ser du pointen. Den første tekstkomponent får automatisk fokus.

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

public class TestFrame extends JFrame {
   
    public TestFrame() {
        super("Test");
        setSize(400,400);
       
        final JTextArea area1 = new JTextArea();
        final JTextArea area2 = new JTextArea();
       
        JSplitPane split = new JSplitPane(    JSplitPane.HORIZONTAL_SPLIT,
                                                        new JScrollPane(area1),
                                                        new JScrollPane(area2)
                                                    );
        getContentPane().add(split, BorderLayout.CENTER);
       
        JPanel buttonPanel = new JPanel();
        JButton closeButton = new JButton("Luk");
        closeButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                System.exit(0);
            }
        });
        buttonPanel.add(closeButton);
        getContentPane().add(buttonPanel, BorderLayout.SOUTH);
       
        addWindowListener(new WindowAdapter() {
            public void windowOpened(WindowEvent event) {
                   
            }
            public void windowClosing(WindowEvent event) {
                System.exit(0);
            }
        });
        area2.requestFocus();
    }
}
class Go {
    public static void main(String[] args) {
      new TestFrame().show();
  }
}
Avatar billede drengel0ven Nybegynder
18. marts 2003 - 22:06 #6
Jeg kan ikke få det til at virke...

Det med WindosListeneren er for avanceret for mig. Kan ikke få det sat op.

RequestFocus har jeg ikke haft held med.
Avatar billede viht Nybegynder
18. marts 2003 - 23:32 #7
Du skal gøre det når vinduet er åbent.. det er den eneste mulighed. Det indebærer desværre at du skal bruge en WindowListener.
Avatar billede drengel0ven Nybegynder
18. marts 2003 - 23:34 #8
Jeg bruger en frame og oven på den er der paneler.
På et af panelerne er den JTextField som det drejer sig om.

Kan du forklare lidt nærmere, tak ?
Avatar billede viht Nybegynder
18. marts 2003 - 23:36 #9
Det er egentlig ligemeget hvor dit JTextField ligger. Metoden:
  public void windowOpened(WindowEvent event) {
      area2.requestFocus();
      area2.append("Area2 har fokus");
  }
bliver kaldt når vinduet står klar, altså dit JFrame. Det eneste du så bare skal gøre er at kalde requestFocus() på den komponent du ønsker skal have det i netop den metode.
Avatar billede drengel0ven Nybegynder
18. marts 2003 - 23:50 #10
Har copy pastet dit sidste svar ind og sat min egen text1 ind istedet for area2. Compiler, men virker ikke umiddelbart, men jeg gør nok noget forkert.
Avatar billede viht Nybegynder
19. marts 2003 - 00:05 #11
Prøv at maile mig din kode: jesper@jollerbarn.dk
Avatar billede _carsten Nybegynder
19. marts 2003 - 00:05 #12
Umiddelbart mener jeg ikke det behøver at være så vanskeligt, alt afhængig af
hvordan du initierer dine textfelter,

Som sidste linie i din constructor kalder du, grabFocus() på dit textFelt.

textFeltXXXXX.grabFocus();
Avatar billede viht Nybegynder
19. marts 2003 - 00:08 #13
Jeg har testet grabFocus, det virker heller ikke :)
Avatar billede drengel0ven Nybegynder
19. marts 2003 - 00:11 #14
er sendt Jesper ;)
Avatar billede _carsten Nybegynder
19. marts 2003 - 00:15 #15
Har meget svært ved at tro det !!
Prøv lige den her !! 
Godnat.

public class Test extends javax.swing.JFrame {
   
    /** Creates new form C */
    public Testing_Tab() {
        initComponents();
        jTextField1.grabFocus();
    }
   
    /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
    private void initComponents() {//GEN-BEGIN:initComponents
        jTextField1 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jTextField2 = new javax.swing.JTextField();
        jButton2 = new javax.swing.JButton();
        jTextField3 = new javax.swing.JTextField();

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

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

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

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

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

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

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

        pack();
    }//GEN-END:initComponents
   
    /** Exit the Application */
    private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
        System.exit(0);
    }//GEN-LAST:event_exitForm
 
   
   
    public static void main(String args[]) {
        new Test().show();
    }
   
   
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton1;
    private javax.swing.JTextField jTextField3;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration//GEN-END:variables
   
}
Avatar billede viht Nybegynder
19. marts 2003 - 00:16 #16
Sådan:

tilføj følgende lige FØR frame1.show()
                frame1.addWindowListener(new WindowAdapter() {
                    public void windowOpened(WindowEvent event) {
                        text1.requestFocus();
                    }
                });
Avatar billede viht Nybegynder
19. marts 2003 - 00:22 #17
Att _carsten>>

På besynderlig vis virker dit eksempel godt, hvis du requester focus inden JFrame vises.

I mit eksempel virker grabFocus ikke.
Avatar billede drengel0ven Nybegynder
19. marts 2003 - 00:22 #18
Sådanner!

Du er GUD :)

Ej, mange tak. Det var et lille problem, der havde plaget mig i lang tid :)
Avatar billede viht Nybegynder
19. marts 2003 - 00:23 #19
Det var så lidt!
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