Avatar billede supa Nybegynder
18. januar 2005 - 11:31 Der er 8 kommentarer og
1 løsning

Markør placering i JTextField

Hejsa..

Jeg kunne godt tænke mig at vide om der er nogen som ved hvordan man får markøren til at starte i et specifikt JTextField, sådan at brugeren ikke selv skal markere detet felt..

Lidt lige som når man går ind på www.google.com så er markøren automatisk sat i søgefeltet..
Avatar billede d0stuffz Nybegynder
18. januar 2005 - 11:50 #1
Lade det specifikke felt være erklæret først.

Hvis du kigger i hjælpen siger den man skal bruge requestFocus(), men den har jeg ikke fået til at virke.

Jeg har lavet løsningen med at lade de forskellige knapper addKeyListener, og sat output fra keys til at outputte i den specifikke felt. Grimt ja, men det virker.
Avatar billede kalp Novice
18. januar 2005 - 12:09 #2
du skal bare sige

jTextField1.requestFocus();
Avatar billede kalp Novice
18. januar 2005 - 12:11 #3
forresten for at det virker skal du selvfølgelig lave en event.. og listener.. hvis du har en Jframe.. altså dit vindue... så kan du lave en event "WindowOpened"

og i den skriver du bare

jTextField1.requestFocus();

eller navnet på din jTextField
Avatar billede kalp Novice
18. januar 2005 - 12:19 #4
Her er et køreklart eksempel.. til Jer begge..

Jeg har valgt at sætte fokus på jTextField2.. dvs så markøren er der nå programmet startes.



package mypackage;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.UIManager;
import java.awt.Dimension;
import java.awt.Toolkit;

public class Start
{
  public Start()
  {
    Frame frame = new Vindue();
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameSize = frame.getSize();
    if (frameSize.height > screenSize.height)
    {
      frameSize.height = screenSize.height;
    }
    if (frameSize.width > screenSize.width)
    {
      frameSize.width = screenSize.width;
    }
    frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
    frame.addWindowListener(new WindowAdapter()
      {
        public void windowClosing(WindowEvent e)
        {
          System.exit(0);
        }
      });
    frame.setVisible(true);
  }

  /**
  *
  * @param args
  */
  public static void main(String[] args)
  {
    try
    {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

    new Start();
  }
}










package mypackage;
import javax.swing.JFrame;
import java.awt.Dimension;
import javax.swing.JTextField;
import java.awt.Rectangle;
import java.awt.event.WindowListener;
import java.awt.event.WindowEvent;

public class Vindue extends JFrame
{
  private JTextField jTextField1 = new JTextField();
  private JTextField jTextField2 = new JTextField();

  public Vindue()
  {
    try
    {
      jbInit();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

  }

  private void jbInit() throws Exception
  {
    this.getContentPane().setLayout(null);
    this.setSize(new Dimension(400, 300));
    this.addWindowListener(new java.awt.event.WindowAdapter()
      {
        public void windowOpened(WindowEvent e)
        {
          this_windowOpened(e);
        }
      });
    jTextField1.setBounds(new Rectangle(145, 70, 59, 20));
    jTextField1.setToolTipText("null");
    jTextField2.setBounds(new Rectangle(145, 100, 59, 20));
    jTextField2.setToolTipText("null");
    this.getContentPane().add(jTextField2, null);
    this.getContentPane().add(jTextField1, null);
  }

  private void this_windowOpened(WindowEvent e)
  {
  jTextField2.requestFocus();
  }
}
Avatar billede d0stuffz Nybegynder
18. januar 2005 - 12:24 #5
Mange tak kalp. Men mit system er lidt mere komplekst end som sådan. Og ja selvfølgelig skal du kalde requestFocus() med det Object som skal have focus.
Avatar billede kalp Novice
18. januar 2005 - 12:30 #6
hvornår bliver objektet oprettet? måske jeg kan finde en løsning hvis jeg kan sætte mig ind i problemet:) for faktisk kan du måske sende en reference med til objektes constructor til den frame for du har din jTextField.. så kan du i din constructor skrive den reference der kom med efterfulgt af jTextField2.requestFocus(); :)
Avatar billede d0stuffz Nybegynder
18. januar 2005 - 12:41 #7
Mit field er ikke synligt setVisible(false); da brugeren ikke bevidst skal skrive i feltet. Synlig er nr 1 ud af 3 regler som skal opfyldes inden du kan få focus.
Enten bruger han hans barcode scanner og får nummeret op eller han går ind i framen hvor han kan oprettet nummeret, skrive det ud, og derefter bruge scanneren.
Avatar billede kalp Novice
18. januar 2005 - 12:45 #8
Synes de sidste 2 linjer stod mig lidt uklart, men ud fra de første 2 så forstod jeg i hvertfald, at det ikke er muligt at sætte fokus på noget som er usynligt.. men så kunne man måske droppe metoden setVisible og istedet sætte en panel hen over den.. skal feltet så være synligt bruger man setVisible på panel:)
Det gør at man så godt kan bruge metoden RequestFocus på sin jTextField for godt nok kan brugeren ikke se den, men for programmet er den synlig. Men har selvfølgelig ikke set dit program så det jo ikke sikkert det en løsning for dig heller
Avatar billede _carsten Nybegynder
18. januar 2005 - 15:56 #9
textField.setCaretPosition(0);  burde gøre det
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