Inofficiellt forum för Nintendo i Sverige

Du är inte inloggad.

Meddelande

Detta forum är nu ett arkiv för gamla minnen! Det går ej att registrera sig eller skriva på detta forum.
Vi hänvisar till nf2.se för vidare diskussioner.

#351 2009-11-05 03:38:13

Skógvur
Meðlem 29
Registrerad: 2008-08-04
Inlägg: 10982

Re: Java

Java är konstigt.


http://i375.photobucket.com/albums/oo191/Skomakarn/alfagraLand.png

Nær dú hev brøtið alla regla som brjúta gár, og dú hev sleikt av dín sár.
Nær dað er hvarki din angr ellr pasjón som râr, hven sit dú í gjenn með dá?

Offline

 

#352 2009-11-05 07:16:26

Bwa Kell
Medlem
Från: West Clocktown
Registrerad: 2008-08-30
Inlägg: 882
Webbsida

Re: Java

Njaej, men wildcards är lite svårbegripligt.

Det enda användningsområdet jag kan se där man inte kan använda någonting annat är som sagt en generell metod som skriver ut en lista.

public static void printList(List<?> lista)
{
     for(Object o : lista) System.out.println(o);
}

I ovanstående exempel kan man kanske tycka att man annars kan ange List<Object>, men det är jävligt korkat eftersom man då bara kan skicka listor där innehållet har blivit typbestämt till just Object. Alltså skulle man behöva göra en ny metod för varje jävla klass i hela Java om man inte hade wildcards i detta läge.

Ett annat användnigsområde är när man vill ha en array av kollektioner.
Exempel, i Java är det inte tillåtet att göra följande (fråga mig inte varför):
ArrayList<String> [] myCollections = new ArrayList<String> [5];

Däremot är det tillåtet att göra följande:
ArrayList [] myCollections = new ArrayList [6];
Men då kommer man få ett varningsmeddelande.

Vill man göra allting snyggt och fint, utan varningsmeddelande och få det att kompilera, så måste man göra på följande sätt:
ArrayList<?> [] myCollections = new ArrayList<?> [4];


Om man nu skulle vilja få den önskade funktionen i första exemplet, så finns det ett sätt att uppnå det genom att typ lura kompilatorn, men då får man ett varningsmeddelande, men allt kommer funka som man vill typ.


Jag hänger på Loading.

Wii-nr: 2362 3133 6235 8005
Brawl-fc: 5413-2455-2274

Offline

 

#353 2009-11-05 07:41:27

Skógvur
Meðlem 29
Registrerad: 2008-08-04
Inlägg: 10982

Re: Java

Ah. I C++ kan man nämligen göra alla funktioner generiska. Antar att det är omöjligt i Java?


http://i375.photobucket.com/albums/oo191/Skomakarn/alfagraLand.png

Nær dú hev brøtið alla regla som brjúta gár, og dú hev sleikt av dín sár.
Nær dað er hvarki din angr ellr pasjón som râr, hven sit dú í gjenn með dá?

Offline

 

#354 2009-11-05 08:51:57

Bwa Kell
Medlem
Från: West Clocktown
Registrerad: 2008-08-30
Inlägg: 882
Webbsida

Re: Java

Skomakar'n skrev:

Ah. I C++ kan man nämligen göra alla funktioner generiska. Antar att det är omöjligt i Java?

Hur menar du då?

Menar du en metod som t.ex:

public T getData()
{
    return data;
}


Jag hänger på Loading.

Wii-nr: 2362 3133 6235 8005
Brawl-fc: 5413-2455-2274

Offline

 

#355 2009-11-05 09:18:47

Skógvur
Meðlem 29
Registrerad: 2008-08-04
Inlägg: 10982

Re: Java

Bwa Kell skrev:

Skomakar'n skrev:

Ah. I C++ kan man nämligen göra alla funktioner generiska. Antar att det är omöjligt i Java?

Hur menar du då?

Menar du en metod som t.ex:

public T getData()
{
    return data;
}

Kod:

template<class T> const T add(const T &a,const T &b)
 {
    return a + b;
 }

Till exempel.


http://i375.photobucket.com/albums/oo191/Skomakarn/alfagraLand.png

Nær dú hev brøtið alla regla som brjúta gár, og dú hev sleikt av dín sár.
Nær dað er hvarki din angr ellr pasjón som râr, hven sit dú í gjenn með dá?

Offline

 

#356 2009-11-05 13:49:14

Bwa Kell
Medlem
Från: West Clocktown
Registrerad: 2008-08-30
Inlägg: 882
Webbsida

Re: Java

Inte för att jag riktigt fattar koden, men jag tror att motsvarande finns i Java.

Grejen är ju annars den att man kanske vill ha en klass med generella metoder till olika grejer, som t.ex. klassen Arrays i Java. Det är ju ingen klass man skapar objekt av och följaktligen kan man inte använda T i ett sådant sammanhang, eftersom T anges när objekt av klassen skapas. I ett sådant sammanhang är nog wildcards den enda lösningen.


Jag hänger på Loading.

Wii-nr: 2362 3133 6235 8005
Brawl-fc: 5413-2455-2274

Offline

 

#357 2009-11-05 22:34:47

Skógvur
Meðlem 29
Registrerad: 2008-08-04
Inlägg: 10982

Re: Java

Den kan förenklas till detta:

Kod:

template<typename T> T add(T a,T b)
 {
    return a + b;
 }

Gör samma sak, men med sämre optimering. Förstår du nu?
Funktionen tillåts helt enkelt ta emot två parametrar av datatypen T, som kan vara vilken datatyp som helst, och returnerar sedan resultatet av operator+(T,T) (helt enkelt resultatet av att använda två värden av datatypen T som operander till en operation med operatorn +). Skulle datatypen inte ha stöd för + funkar det förstås inte, men detta är ju uppenbart en funktion som är till för att addera tal.

Exempel:

Kod:

int    a = add(8,9);
float  b = add(12.2f,1.3f);
double c = add(8.6,4.21);

a får värdet 17, b får värdet 13.5f och c får värdet 12.81, och man slipper skriva tre olika funktioner som gör samma sak, men tar parametrar av olika datatyper.

Som funktionen är skriven nu måste dock båda parametrar vara av samma datatyp (datatypen på första parametern), vilket gör den ganska opraktiskt. Bäst vore att definiera två typer:

Kod:

template<class T,class U> const T add(const T &a,const U &b)
 {
    return a + b;
 }

Senast redigerat av Skomakar'n (2009-11-05 22:39:08)


http://i375.photobucket.com/albums/oo191/Skomakarn/alfagraLand.png

Nær dú hev brøtið alla regla som brjúta gár, og dú hev sleikt av dín sár.
Nær dað er hvarki din angr ellr pasjón som râr, hven sit dú í gjenn með dá?

Offline

 

#358 2009-11-06 17:26:03

Bwa Kell
Medlem
Från: West Clocktown
Registrerad: 2008-08-30
Inlägg: 882
Webbsida

Re: Java

Sådär tror jag att man typ kan göra i Java också, i alla fall samma funktion. Men den täcker inte området som wildcards täcker skulle jag tro.


Jag hänger på Loading.

Wii-nr: 2362 3133 6235 8005
Brawl-fc: 5413-2455-2274

Offline

 

#359 2009-11-29 21:44:53

Eki
Medlem P30
Från: Lund
Registrerad: 2008-11-27
Inlägg: 6997
Webbsida

Re: Java

Jag försöker lägga en (eller, 450, men sak samma) JPanel som barnkomponent (hmm) till en annan JPanel, och den ska bara vara några få pixlar mindre. Föräldrakomponenten ska alltså vara som en ram till den. Men barnkomponenterna får inte alls rätt egenskaper; de blir små kvadrater (typ?) i mitten av förädrakomponenten istället.

What?


kolasås Dags att ändra den gråa texten ser jag. Och den vita också.
Brawl: 3824 0053 9360
Heart Gold: 2450 7096 3696

PÅSEn

Offline

 

#360 2009-11-29 22:01:57

Bwa Kell
Medlem
Från: West Clocktown
Registrerad: 2008-08-30
Inlägg: 882
Webbsida

Re: Java

Eki skrev:

Jag försöker lägga en (eller, 450, men sak samma) JPanel som barnkomponent (hmm) till en annan JPanel, och den ska bara vara några få pixlar mindre. Föräldrakomponenten ska alltså vara som en ram till den. Men barnkomponenterna får inte alls rätt egenskaper; de blir små kvadrater (typ?) i mitten av förädrakomponenten istället.

What?

Om du bara ska ha en ram runt en JPanel, så kan du ju typ använda följande kodstycke bl.a. (finns flera olika typer av ramar).

Kod:

panel.setBorder(BorderFactory.createTitledBorder("Detta är en JPanel"));

Jag hänger på Loading.

Wii-nr: 2362 3133 6235 8005
Brawl-fc: 5413-2455-2274

Offline

 

#361 2009-11-29 22:18:28

Eki
Medlem P30
Från: Lund
Registrerad: 2008-11-27
Inlägg: 6997
Webbsida

Re: Java

Bwa Kell skrev:

Eki skrev:

Jag försöker lägga en (eller, 450, men sak samma) JPanel som barnkomponent (hmm) till en annan JPanel, och den ska bara vara några få pixlar mindre. Föräldrakomponenten ska alltså vara som en ram till den. Men barnkomponenterna får inte alls rätt egenskaper; de blir små kvadrater (typ?) i mitten av förädrakomponenten istället.

What?

Om du bara ska ha en ram runt en JPanel, så kan du ju typ använda följande kodstycke bl.a. (finns flera olika typer av ramar).

Kod:

panel.setBorder(BorderFactory.createTitledBorder("Detta är en JPanel"));

Funkar jättebra, tack så mycket.

Ville helst ha det så att det var mer ram längst nere och till höger, men jag kommer nog byta ut dem mot bilder senare ändå, och det är en väldigt liten detalj.

Om jag vill ändra färgen på ramen, är det enklast att köra panel.setBorder(new Color(r,g,b)); igen då?

Senast redigerat av Eki (2009-11-29 22:18:56)


kolasås Dags att ändra den gråa texten ser jag. Och den vita också.
Brawl: 3824 0053 9360
Heart Gold: 2450 7096 3696

PÅSEn

Offline

 

#362 2009-11-30 07:24:42

Bwa Kell
Medlem
Från: West Clocktown
Registrerad: 2008-08-30
Inlägg: 882
Webbsida

Re: Java

Eki skrev:

Bwa Kell skrev:

Eki skrev:

Jag försöker lägga en (eller, 450, men sak samma) JPanel som barnkomponent (hmm) till en annan JPanel, och den ska bara vara några få pixlar mindre. Föräldrakomponenten ska alltså vara som en ram till den. Men barnkomponenterna får inte alls rätt egenskaper; de blir små kvadrater (typ?) i mitten av förädrakomponenten istället.

What?

Om du bara ska ha en ram runt en JPanel, så kan du ju typ använda följande kodstycke bl.a. (finns flera olika typer av ramar).

Kod:

panel.setBorder(BorderFactory.createTitledBorder("Detta är en JPanel"));

Funkar jättebra, tack så mycket.

Ville helst ha det så att det var mer ram längst nere och till höger, men jag kommer nog byta ut dem mot bilder senare ändå, och det är en väldigt liten detalj.

Om jag vill ändra färgen på ramen, är det enklast att köra panel.setBorder(new Color(r,g,b)); igen då?

Om du vill ändra färg på ram så får du skapa ett nytt ramobjekt och använda det istället.
(Olika border-klasser har sina egna olika grejer: http://java.sun.com/javase/6/docs/api/j … order.html )

Men såhär får du nog göra.

Kod:

Border b = new LineBorder(Color.red);
panel.setBorder(b);
Border b2 = new LineBorder(new Color(200,150,70));
panel.setBorder(b2);

Annars hittar du nog säkert ett och annat nyttigt i detta "How to use borders" avsnitt.
http://java.sun.com/docs/books/tutorial … order.html

Senast redigerat av Bwa Kell (2009-11-30 07:29:31)


Jag hänger på Loading.

Wii-nr: 2362 3133 6235 8005
Brawl-fc: 5413-2455-2274

Offline

 

#363 2009-11-30 14:28:36

Eki
Medlem P30
Från: Lund
Registrerad: 2008-11-27
Inlägg: 6997
Webbsida

Re: Java

Jag menar

panel.setBorder(new LineBorder(new Color(r,g,b));

sen senare

panel.setBorder(new LineBorder(new Color(r,g,b));
igen, men med andra värden på r, g och b.

Men som sagt, det är nog tillfälligt i längden ändå.


kolasås Dags att ändra den gråa texten ser jag. Och den vita också.
Brawl: 3824 0053 9360
Heart Gold: 2450 7096 3696

PÅSEn

Offline

 

#364 2009-11-30 16:49:46

Bwa Kell
Medlem
Från: West Clocktown
Registrerad: 2008-08-30
Inlägg: 882
Webbsida

Re: Java

Eki skrev:

Jag menar

panel.setBorder(new LineBorder(new Color(r,g,b));

sen senare

panel.setBorder(new LineBorder(new Color(r,g,b));
igen, men med andra värden på r, g och b.

Men som sagt, det är nog tillfälligt i längden ändå.

Ja det går såvitt jag förstått det alldeles utmärkt.


Jag hänger på Loading.

Wii-nr: 2362 3133 6235 8005
Brawl-fc: 5413-2455-2274

Offline

 

#365 2010-08-12 00:38:50

Greensea
Medlem P27
Från: Piteå
Registrerad: 2008-09-02
Inlägg: 1291

Re: Java

Jag håller på att skriva ett luffarschack i Java med Swing. Har fått det att fungera bra, och det ser ut som det ska både på min dator med Ubuntu och en annan dator med Windows XP.

http://img266.imageshack.us/img266/2432/tictactoe2.png

Men när jag bootar upp i Windows 7 på min dator och kör programmet så ser det ut så här:
http://img413.imageshack.us/img413/6144/tictactoe1.gifhttp://img708.imageshack.us/img708/4387/tictactoe2.gif

WTF? Någon som har någon förklaring till detta? Java ska ju vara plattformsoberoende.. noes

Edit: Har hittat felet nu (med hjälp av nån vänlig person på stackoverflow.com). Jag hade gjort en subklass till JPanel, och overrideat (jag hatar att prata programmering på svenska) paintComponent() för att den automatiskt skulle visa rätt symbol i cellen (X eller O). Tydligen så hade jag råkat sätta koden för att skapa kantlinjen till cellen i paintComponent(), vilket innebar att det skapades en ny kantlinje varje gång komponenten renderas, vilket ledde till den där skumma buggen.

Senast redigerat av Greensea (2010-08-12 02:21:24)

Offline

 

Sidfot

Powered by PunBB
(© Copyright 2002–2008 PunBB)
© Copyright 2008-2010 Alfred Löfving och Rasmus Utterberg

[ Generated in 0.179 seconds, 7 queries executed ]