LostFocus kompones azonositasa

Címkék
LostFocus kompones azonositasa
2009-09-05T10:18:48+02:00
2009-09-07T09:43:35+02:00
2022-07-19T11:36:07+02:00
bundig
Sziasztok,
egy kezdöcske volnek itt. Nemtudom hogy jo nyomon jarok e, de valami olyat szeretnek, hogy be tudjam azonositani azt az elemet, amiröl a focus elveszik.

eddig valahogy igy nez ki a dolog:

...
pnMidle.add(tfBemerkung = new JTextField(10));
tfBemerkung.setHorizontalAlignment(JTextField.CENTER);
tfBemerkung.addFocusListener(focusListener);
...

...
FocusListener focusListener = new FocusListener() {

public void focusGained(FocusEvent e) {}

public void focusLost(FocusEvent e) {
//System.out.println("SimpleName:" + e.getComponent().getClass().getSimpleName() + "\n");
//System.out.println("Name:" + e.getOppositeComponent().getClass().getName());

}

...

Szoval valami olyanra fondoltam, hogy pl:getSimpleName()-el megkapom a kompnenes nevet (a fbBemerkung-re gondoltam es nem a JTextField-re) vagy valami ilyen.

Rossz vele tapogatozom ? Vagy teljesen hülyeséget akarok ?!?

köszi
Mutasd a teljes hozzászólást!
Szerintem klorand megoldása szebb, de azt is használhatod nyugodtan amit én írtam.

Enyémet talán akkor érdemes használni inkább ha a Listener obj. más osztályban van mint a komponensed inicializálása, mert akkor nem kell referenciák átadogatásával foglalkozni, elég csak a komponensek nevét tárolni pl. statikus mezőben:

public static String TF_BEMERKUNG = "tfBemerkung"; ... JTextField tfBemerkung = new JTextField(); tf.setName(TF_BEMERKUNG); ... public void focusLost(FocusEvent e) { JTextField source = (JTextField)e.getSource(); if (source.getName().equals(Main.TF_BEMERKUNG) { ... } }

Szerintem használd azt amelyik jobban tetszik. :)
Mutasd a teljes hozzászólást!

  • Nem tudom pontosan mi a célod, de a komponens referenciáját így kaphatod meg a focusLost metódusból:

    JTextField tfBemerkung2 = (JTextField)e.getSource();

    Talán ez is jó lesz. Arra pontosan nem tudom a választ amit kérdeztél.
    Mutasd a teljes hozzászólást!
  • hat mezöellenörze akarom hasznalni. De ahhoz tudni kell ugyebar hogy melyik mezöröl van szo. Ezert arra gonoltam, a lost focussal teszem ezt meg, es erre kellene.
    Mutasd a teljes hozzászólást!
  • a getSource() ezt adja :
    Temporary: javax.swing.JTextField[,496,0,114x36,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@1813fac,flags=296,maximumSize=,minimumSize=,preferredSize=,caretColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],disabledTextColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],selectionColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],columns=10,columnWidth=11,command=,horizontalAlignment=CENTER]
    Mutasd a teljes hozzászólást!
  • Most már azt hiszem értem mit akarsz. :)
    Ha jól emlékszem, minden JComponent-nek van egy setName metódusa, ami egy String. Ezt beállítod amikor létrehozod a komponenst, majd a focusLost metódusban a getName-et ellenőrzöd.
    pl:


    JTextField tfBemerkung = new JTextField(); tf.setName("tfBemerkung"); ... public void focusLost(FocusEvent e) { JTextField source = (JTextField)e.getSource(); if (source.getName().equals("tfBemerkung") { ... } }
    Mutasd a teljes hozzászólást!
  • a getSource() ezt adja :


    Ez egy JTextField ojjektum, aminek meghivodott a toString metodusa!

    Ha a textfield peldanyok referenciait megtartod valahol az osztalyban (pl adattagok az osztalyodban: class valami { JTextField textField1;), akkor e.getSource()-ot osszehasonlithatod ezekkel:

    if(e.getSource() == textField1) ...
    Mutasd a teljes hozzászólást!
  • igen, erre gondoltam lackoka !

    meg annyi, hogy ez egy olyan "standard" megoldas, vagy nagyon gagyi ? Magyarul, ezt igy kell csinalni, vagy ezt igy nem szabad csinalni.
    Mutasd a teljes hozzászólást!
  • Szerintem klorand megoldása szebb, de azt is használhatod nyugodtan amit én írtam.

    Enyémet talán akkor érdemes használni inkább ha a Listener obj. más osztályban van mint a komponensed inicializálása, mert akkor nem kell referenciák átadogatásával foglalkozni, elég csak a komponensek nevét tárolni pl. statikus mezőben:

    public static String TF_BEMERKUNG = "tfBemerkung"; ... JTextField tfBemerkung = new JTextField(); tf.setName(TF_BEMERKUNG); ... public void focusLost(FocusEvent e) { JTextField source = (JTextField)e.getSource(); if (source.getName().equals(Main.TF_BEMERKUNG) { ... } }

    Szerintem használd azt amelyik jobban tetszik. :)
    Mutasd a teljes hozzászólást!
  • Lehet igy is csinalni, amit en mutattam, hatekonyabb...
    Mutasd a teljes hozzászólást!
  • Mindkettötöknek köszönöm a hozzászolást.
    Asszem lackoka megoldasat fogom most hasznalni.

    Mutasd a teljes hozzászólást!
Címkék
abcd