Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

UIManager.put() dozvoljava duplikate !?!?!?

[es] :: Java :: UIManager.put() dozvoljava duplikate !?!?!?

[ Pregleda: 753 | Odgovora: 4 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bobjan

Član broj: 27819
Poruke: 60
*.static.sbb.co.yu.

Jabber: bobjan@12jabber.com
Sajt: www.logotet.com


Profil

icon UIManager.put() dozvoljava duplikate !?!?!?05.10.2006. u 08:12

Hoću da postavim default fontove za neke komponente u aplikaciji i lepo uradim:
Code:
UIManager.put("Label.font", myFont); 


Ne radi! Čačakam da vidim šta je po sredi i nakon:
Code:
       Enumeration keys = UIManager.getDefaults().keys();
      while (keys.hasMoreElements()) {
              String key = (String) keys.nextElement();
                 System.out.println(key);
    } 

umalo se ne šlogirah kada sam video da imam dva "Label.font" ključa u Hashtabeli.
Prvo sam, naravno, pomislio da se negde krije neki nevidljivi karakter, gledao, više puta prekucavao iz početka i uvek isto.
Ima li neko ideju šta se dešava ?
Inače, za neke druge komponente radi kao što se i očekuje.
BTW, u pitanju je Java 1.5 na XP, a IDE je IntelliJ IDEA(mada na radi ni kada testiram van IDEa).

05.10.2006. u 08:12 

bobjan

Član broj: 27819
Poruke: 60
*.static.sbb.co.yu.

Jabber: bobjan@12jabber.com
Sajt: www.logotet.com


Profil

icon Re: UIManager.put() dozvoljava duplikate !?!?!?06.10.2006. u 09:26
Evo jos malo koda:
Code:

import javax.swing.*;
import java.util.Enumeration;
import java.awt.*;


public class TestUIManager {
    public static void main(String[] args) {
        UIDefaults uid = UIManager.getDefaults();
        uid.remove("Label.font");
        UIManager.put("Label.font", new Font("Arial", Font.PLAIN,11));
        Enumeration keys = UIManager.getDefaults().keys();
        while (keys.hasMoreElements()) {
        String key = (String) keys.nextElement();
        int id = key.indexOf("Label.");
        if(id >= 0)
                System.out.println(":" + key);
    }
    }
}


Kada stavim prve dve linije, tj. kada uradim remove("Label.font"), radi lepo, ako ne uradim remove(),onda mi se ispise (lako je da se vidi, kratka je lista) dva puta element Hashtabele sa kljucem "Label.font".
Da li se to jos nekom dogadja, ne znam da li ima veze sa mojim okruzenjem ili je to prosto tako.
Ovo je ceo kod, ako nekog ne mrzi, neka proba pa kaze svoje misljenje.




06.10.2006. u 09:26 

sale83
Aleksandar Ervacanin
Full Time Student & Full Time Zaposlen ( IT Suppo..
Sydney

Član broj: 41625
Poruke: 617
*.ispone.net.au.



Profil

icon Re: UIManager.put() dozvoljava duplikate !?!?!?06.10.2006. u 12:46
Pogledaj ovo:

http://bdn.borland.com/article/29991


Poz
sale
PHP/MySQl/SQL/VB.NET/JAVA/JSP/Servlet/MSSQLServer/MSAccess/Perl
COBOL/JCL/CICS -> IBM Mainframe
Nortel/Cisco/Sidewinder
06.10.2006. u 12:46 

bobjan

Član broj: 27819
Poruke: 60
*.dynamic.sbb.co.yu.

Jabber: bobjan@12jabber.com
Sajt: www.logotet.com


Profil

icon Re: UIManager.put() dozvoljava duplikate !?!?!?07.10.2006. u 16:26
Hvala na linku, ali nije problem u ulozi klase UIManager već u tome što UIDefaults dozvoljava duple ključeve.
Kako UIDefaults nasleđuje Hashtable, za očekivanje je da ako uradiš
Code:

uid.put(kljuc, objekat);

u slučaju da već postoji objekat sa istim ključem, da se zameni.
Mozda je klasa UIDefaults redefinisala metodu put(...) iz nadklase Hashtable, ali me deluje nelogično, i nigde nisam to pročitao u dokumentaciji.
Primer koji sam postovao u prethodnom javljanju sam probao i na dva računara pod XP-om, i na Linuxu, i kroz IDE i van njega, i uvek mi javlja da imam dva objekta sa klučem "Label.font".
Probao sam i sa ključem "Label.background", i tada sam dobio duplikat!
Ja sam sa remove() pre put(), rešio problem što se tiče onog što hoću da postignem u aplikaciji, ali su mi ivi duplikati totalno nejasni, možda mi je promaklo nešto u dokumentaciji ili u članku čiji link je postovan, ali više mi liči na bug.
Zato, bio bih zahvalan da mi još neko potvrdi ili opovrgne ovo što ja dobijam, pre nego što reklamiram bug.
Poz.
07.10.2006. u 16:26 

sale83
Aleksandar Ervacanin
Full Time Student & Full Time Zaposlen ( IT Suppo..
Sydney

Član broj: 41625
Poruke: 617
*.ispone.net.au.



Profil

icon Re: UIManager.put() dozvoljava duplikate !?!?!?08.10.2006. u 02:16
Ja kad stavim:
Code:

UIManager.put("Label.font",new Font("Serif",Font.ITALIC,12));



On deluje na objekat ali nisam primecivao duple kljuceve tako da meni nije smetalo to sa istim...

Tvoj sam primer video i vidim da imaju dupli..

Mozda je to Bug ali nisam ja siguran posto u ovom dole primeru nema duplikata !!

Inace pogledaj ovaj primer gde nema duplikata:
Code:


import javax.swing.*;
import java.util.Enumeration;
import java.awt.*;
import javax.swing.plaf.*;


public class TestUIManager {
    
    public static void main(String[] args) {
    setUIFont (new FontUIResource("Arial",Font.ITALIC,15));
 
    }
    
  //Postavi default Font Za odredjenu komponentu  
public static void setUIFont (FontUIResource font){
    
    Enumeration keys = UIManager.getDefaults().keys();
        while (keys.hasMoreElements()) {
                String key = (String)keys.nextElement();
 
               int id = key.indexOf("Label.");
                  if(id >= 0) { 
                  
                      Object value = UIManager.get (key);
                    if (value instanceof FontUIResource) {
                        // Menjamo Font samo za Label.
                        UIManager.put (key, font);  
                    }
                   System.out.println(":" + key + " Label Font =>" +  UIManager.getFont(key));
                  }  
                   
                   // Proveri za List. - Font je ostao onaj koji je po Defaultu ( Naravno da je ostao)
                  int id1 = key.indexOf("List.");
                  if(id1 >= 0) {    
                  System.out.println(":" + key + " List Font =>" +  UIManager.getFont(key));
                  }
                  
          }
    } 
 

}



Poz
sale
PHP/MySQl/SQL/VB.NET/JAVA/JSP/Servlet/MSSQLServer/MSAccess/Perl
COBOL/JCL/CICS -> IBM Mainframe
Nortel/Cisco/Sidewinder
08.10.2006. u 02:16 

[es] :: Java :: UIManager.put() dozvoljava duplikate !?!?!?

[ Pregleda: 753 | Odgovora: 4 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.