20. december 2010 - 11:45Der er
20 kommentarer og 1 løsning
Sætte icon i en jLabel
Jeg vil gerne oprette et antal jLabels i min applikation. Typen jLabel er nødvendig, da jeg har fundet ud af, hvordan man kan trække jLabels rundt i GUI'et.
Problemet opstår, når jeg gerne vil styre jLabellens udseende fra koden. En jLabel skal helst fremstå som en cirkel, men en jLabel er vel som udgangspunkt en rektangel.
Jeg har derfor forsøgt, at opnå det ønskede på bl.a. denne måde:
Shape circle = new Ellipse2D.Float(100.0f, 100.0f, 100.0f, 100.0f); Image image=(Image)circle; Icon imageIcon=(Icon)image; jLabel14.setIcon(imageIcon);
Men jeg kan ikke få det til at virke.
Findes der virkelig ikke en metode til at lave en jLabel til en cirkel?
Ja, det var selvfølgelig en mulighed. Jeg gik bare ud fra, at det ville være ret omfattende. Men ved nærmere eftertanke burde det vel egentlig ikke være så omfattende endda.
I mellemtiden har jeg forsøgt blot at give jLabel en baggruundsfarve, og skrive et enkelt tegn i dens tekst. Så var det meningen, at man skulle kunne drag&drop labellen på gui'en. Men det virker ikke rigtigt. Hvis jeg forsøger at trække labellen langsomt, så kan jeg se, at en del af dens rektangel bliver overskrevet af en hvis rektangel. Og den hvide rektangel bevæger sig langsomt, når jeg efterfølgende bevæger cursoren. Jeg går derfor ud fra, at for at implementere en effektiv drag&drop på en jLabel, så skal jLabellen have sat et ikon på sig? Altså så baggrundsfarve og tekst ikke er nok?
Da det blot er meningen, at der skal kunne trækkes et lille billede rundt i applikationen, virker det vel ikke med jPanel. Derimod har jeg tidligere fået det til at virke med jLabel (selvom jeg ikke har koden længere).
Hvis man udskifter "JPanel" i dit eksempel med "jLabel", vil man så opnå det ønskede?
Jeg havde godt set det eksempel via en søgning, men jeg var egentlig ude efter et mere simpelt et. Eller også kunne jeg blot benytte det, jeg har allerede. Det har virket, så det burde kunne fungere igen.
Hov, ja, du har da så ganske ret. I min hast lagde jeg primært mærke til billedet på siden, så en lille smule kode, og fik så (fejlagtigt) opfattelsen af, at det var et eksempel på en drag&drop-applikation med noget label-halløj. Og da jeg havde set det eksempel på drag&drop med det billede over sig (som jeg ikke kunne bruge til ret meget i sin tid) antog jeg, at det var det samme. Men dette eksempel giver da faktisk ved nærmere eftersom lidt at tænke over :-)
Du har tidligere givet mig et link til et kort eksempel på en drag&drop-funktion på en jLabel, men jeg kan ikke finde det link nu. Der skulle vel ikke være mulighed for, at du vil fortælle mig det link igen?
Alle de eksempler jeg kan finde på drag&drop med jLabel kan jeg nemlig ikke få til at virke 100%. Muligvis kan jeg godt trække jLabellen rundt, men jeg kan ikke droppe den, og så trække videre på den igen...
Nu har jeg fået lavet det sådan, at jeg godt kan trække jLabel rundt. Problemet er blot, at den grafisk repræsentation af jLabelen ikke er der - hverken når den trækkes rundt eller når den droppes.
Det er nu lykkedes mig, at kunne trække jLabellen rundt i GUI'et. Problemet er blot, at jLabellen bliver renderet neden under de andre controller - f.eks. jPanels og jComboBoxes. Hvis jeg i mouseDragged skriver:
Så bliver jLabellen renderet øverst. Men så bliver de nederste controller ikke opdateret - altså kommer der en lang grå streg efter jLabellen, hvor den er blevet trukket. Hvis jeg sætter mainPanel.repaint(); i aktion, så bliver de nederste controller renderet rigtigt - men så bliver jLabellen ikke synlig, når den trækkes hen over andre controller.
Findes der nogle smarte løsninger på dette? Jeg kan ikke umiddelbart se sammenhængen...
Siden sidst har jeg fundet et eksempel, hvor der benyttes klasser i "dnd" til at opnå det ønskede. Men da mit tidligere implementerede eksempel ikke benyttede dette, droppede jeg det hurtigt igen af frygt for, at det muligvis blot ville lede mig ud i endnu større problemer.
...men det kunne da godt være, at jeg lige skulle forsøge at implementere dnd fra følgende url, i stedet for at bikse en løsning sammen helt fra bunden af:
Men dette kan jeg heller ikke få til at blive dragable.
Min oprindelige applikation består af: Form |-MainPAnel |-jPanel1 |-jLabel1 |-jLabel2 |-jPanel2 |-masser af komponenter |-jPanel3 |-jLayeredPane2 |-jLabel13 |-jLabel14
Det er jLabel14, der skal være dragable, så den kan trækkes over på jPanel1.
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.