Vinnaren i pepparkakshustävlingen!
2016-08-16, 02:44
  #1
Medlem
Hej! Jag försöker få en icon till ett gui men lyckas inte har kollat upp tutorials men får inget att funka.
Här undertill är mitt senaste försök. Om någon hade kunnat ge mig vägledning hade det uppskattats.
Citera
2016-08-16, 06:51
  #2
Moderator
Protons avatar
Citat:
Ursprungligen postat av C-Meister
Hej! Jag försöker få en icon till ett gui men lyckas inte har kollat upp tutorials men får inget att funka.
Här undertill är mitt senaste försök. Om någon hade kunnat ge mig vägledning hade det uppskattats.
Det där kompilerar väl inte ens?

Du skapar en IconImage i din main, sedan försöker du använda den i en HELT ORELATERAD klass, det lär inte funka så bra.

2 sätt att lösa det på:

Skapa en konstruktor i Icon-klassen som tar en parameter, antingen en sökväg till ikonen, eller en färdiginitierad Image som du sedan använder.

Initiera din Image som du vill använda i konstruktorn i Icon-klassen.
Citera
2016-08-21, 14:15
  #3
Medlem
sentes avatar
Först ändrade jag namnet på själva classen från Icon till MyIcon. Kanske hade varit mer passande med MyWindow eller nåt i den stilen då koden gör ett fönster. Men också för att Icon är ett interface i java api'n. tänkte bäst att hålla saker isär vid namngvning. Dessutom bör man använda camelCase. Dvs variabler bör börja med liten bokstav för att särskilja dem från Typer, Interface etc.
Icon Icon = new Icon() <---- bad
Icon icon = new Icon() <---- good.
Sedan som Proton säger så kunde inte variabeln iconImg användas, då den liksom bara flöt mellan en metod och en konstruktor.
Dessa har inte tillgång till variabler o annat som finns utanför dem, såvida man inte ger dem det i form av argument.
Jag löste det genom att flytta in den i sitt samanhang alltså in i Själva konstruktorn där den används.
setVisible gjorde jag likaledes med. har du setSize, setLocation, setDefault... så kan du ju lika gärna ha setVisible i construktorn också

Lösning i kod:
Citera
2016-09-01, 22:13
  #4
Medlem
kjellbrels avatar
Använd Toolkit.getImage(URL url) istället för Toolkit.getImage(String filename). Jag använder alltid den förstnämnda numera efter att ha råkat på trassel med den andra. Har inte orkat kolla upp vad problemet egentligen är med den, men har noterat att den trasslar för många som frågar på stackoverflow.com.

URL-arg skapar du enklast med getClass().getResource("/src/1.jpg") och var noga med att din classpath har med pathen till din src-folder. Jag skulle dock föreslå att du använder en annan mapp än just din java source för dina bilder och andra resurser, för ordningens skull.

Förslaget du fått att använda inledande versal bara för typnamn och inte för variabelnamn håller jag med om starkt. Även att du bör undvika namnkollisioner med redan befintliga typer (Icon), men jag skulle nog föreslå att att du försöker namnge dina typer efter vad de faktiskt representerar i din "modell" och inte med olika "meningslösa" anonyma namnkonventioner, som t ex MyIcon.

Sen verkar det råda total förvirring i denna tråd om din variabel iconImg. Så som du deklarerat den så är den en instansvariabel med package-access (eftersom ingen access modifier angetts, som t ex private) och existerar för varje objekt du skapar av denna typ under objektets livslängd. Om man initierar en instansvariabel direkt vid dess deklaration, så innebär det att detta kommer att ske i samtliga konstruktorer som klassen har som första del av dess body (före den kod du själv skrivit).

Det kommer med andra ord att fungera i ditt fall, MEN eftersom du endast använder denna variabel som argument till setIconImage, så bör denna vara en lokal variabel i konstruktorn istället, då den inte behövs efter detta.
__________________
Senast redigerad av kjellbrel 2016-09-01 kl. 22:19.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback