/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
JLabel som knap og "Post-It" frame
Fra : Janus


Dato : 07-04-05 23:42

Hej NG!

Jeg ønsker at kunne give brugeren af mit program en lille hjælpende
hånd/et lille hint, når der skal indtastes og vælges i comboboxes. Min
GUI består af en række JPanels med selve inputfeltet og så et lille .bmp
-spørgsmålstegn pakket ind i en JLabel.

Jeg har muligheden for at smide en ToolTipText på spørgsmålstegnet, men
den tekst der skal vises fylder en del, og så vidt jeg kan se, kan man
ikke lave linieskift i et Tool Tip (?). Ydermere vil jeg gerne ha' at
hjælpteksten kommer frem, når man trykker på spørgsmålstegnet og ikke
bare lader musen svæve over.

Men:
   Hvordan gør jeg det, altså laver min JLabel til en "button" ?       Skal
jeg selv sidde og fedte med AbstractButton eller er der en anden måde?

Og:
   Kan hjælpeteksten der kommer frem placeres i en frame af en art uden
nogen form for decoration, altså så den ligner en Post-It (de gule
sedler med limstribe, der hænger på din monitor :)) Den skal så lukke
ved at klikke på Post-It'en (igen et ActionListener-problem?)

Vh Janus

 
 
Søren Berg Glasius (08-04-2005)
Kommentar
Fra : Søren Berg Glasius


Dato : 08-04-05 07:37

Hej Janus

Du kan selv tilføje en mouse-listener til dit label og så vente på
klik/dobbeltklik.

Til fremviseren kan du lave et udekoreret vindue vha JWindow. Samtidig
kan du lave noget "always on top" kode (kan ikke lige huske hvordan) -
og så kan du lave en mouse-listener som fjerner JWindow'et når der
klikkes i det. Hvis du tilføjer et JTextArea til dit JWindow, kan du
disable edit, så har du noget, som kan formatere teksten for dig.

Alt i alt tror jeg det kan gøres rimelig let - har dog ikke selv prøvet

Håber det kan give inspiration til dit projekt.

MVN og god weekend,
Søren


Janus skrev:
> Hej NG!
>
> Jeg ønsker at kunne give brugeren af mit program en lille hjælpende
> hånd/et lille hint, når der skal indtastes og vælges i comboboxes. Min
> GUI består af en række JPanels med selve inputfeltet og så et lille .bmp
> -spørgsmålstegn pakket ind i en JLabel.
>
> Jeg har muligheden for at smide en ToolTipText på spørgsmålstegnet, men
> den tekst der skal vises fylder en del, og så vidt jeg kan se, kan man
> ikke lave linieskift i et Tool Tip (?). Ydermere vil jeg gerne ha' at
> hjælpteksten kommer frem, når man trykker på spørgsmålstegnet og ikke
> bare lader musen svæve over.
>
> Men:
> Hvordan gør jeg det, altså laver min JLabel til en "button"
> ? Skal jeg selv sidde og fedte med AbstractButton eller er der
> en anden måde?
>
> Og:
> Kan hjælpeteksten der kommer frem placeres i en frame af en art uden
> nogen form for decoration, altså så den ligner en Post-It (de gule
> sedler med limstribe, der hænger på din monitor :)) Den skal så lukke
> ved at klikke på Post-It'en (igen et ActionListener-problem?)
>
> Vh Janus

Janus (08-04-2005)
Kommentar
Fra : Janus


Dato : 08-04-05 16:36

Søren Berg Glasius wrote:
> Hej Janus
>
> Du kan selv tilføje en mouse-listener til dit label og så vente på
> klik/dobbeltklik.
>
> Til fremviseren kan du lave et udekoreret vindue vha JWindow. Samtidig
> kan du lave noget "always on top" kode (kan ikke lige huske hvordan) -
> og så kan du lave en mouse-listener som fjerner JWindow'et når der
> klikkes i det. Hvis du tilføjer et JTextArea til dit JWindow, kan du
> disable edit, så har du noget, som kan formatere teksten for dig.
>
> Alt i alt tror jeg det kan gøres rimelig let - har dog ikke selv prøvet
>
> Håber det kan give inspiration til dit projekt.
>
> MVN og god weekend,
> Søren
>

Selv god weekend :)

Ja, man kan ikke se skoven for bare træer...


Jeg laver en inner class:

public class ClickableLabel extends JLabel implements MouseListener {

   public ClickableLabel(IconImage im) {
      super(im);
   }
   public void MouseClicked(Event ev0) {
      System.out.println("test, for pokker!");
   }
[alle andre metoder fra interfacet er tomme]
}

-men det virker ikke. Komplierer fint, men mon ikke jeg på en eller
anden måde mangler at registrere et sted, at der skal lyttes efter klik?

Hvis jeg lader min "outer"-class implementere MouseListener, virker det
fint nok, men det giver jo lidt rodet kode.
Kan jeg ikke bare lave een komponent der holder på mit ImageIcon OG
lytter efter MouseClicks?

Vh Janus

Janus (08-04-2005)
Kommentar
Fra : Janus


Dato : 08-04-05 16:55

Janus wrote:
> Søren Berg Glasius wrote:
>
>> Hej Janus
>>
>> Du kan selv tilføje en mouse-listener til dit label og så vente på
>> klik/dobbeltklik.
>>
>> Til fremviseren kan du lave et udekoreret vindue vha JWindow. Samtidig
>> kan du lave noget "always on top" kode (kan ikke lige huske hvordan) -
>> og så kan du lave en mouse-listener som fjerner JWindow'et når der
>> klikkes i det. Hvis du tilføjer et JTextArea til dit JWindow, kan du
>> disable edit, så har du noget, som kan formatere teksten for dig.
>>
>> Alt i alt tror jeg det kan gøres rimelig let - har dog ikke selv
>> prøvet
>>
>> Håber det kan give inspiration til dit projekt.
>>
>> MVN og god weekend,
>> Søren
>>
>
> Selv god weekend :)
>
> Ja, man kan ikke se skoven for bare træer...
>
>
> Jeg laver en inner class:
>
> public class ClickableLabel extends JLabel implements MouseListener {
>
> public ClickableLabel(IconImage im) {
> super(im);
> }
> public void MouseClicked(Event ev0) {
> System.out.println("test, for pokker!");
> }
> [alle andre metoder fra interfacet er tomme]
> }
>
> -men det virker ikke. Komplierer fint, men mon ikke jeg på en eller
> anden måde mangler at registrere et sted, at der skal lyttes efter klik?
>
> Hvis jeg lader min "outer"-class implementere MouseListener, virker det
> fint nok, men det giver jo lidt rodet kode.
> Kan jeg ikke bare lave een komponent der holder på mit ImageIcon OG
> lytter efter MouseClicks?
>
> Vh Janus

Og svaret kommer jeg så selv med:

class MyListener2 extends JLabel implements MouseListener {

   private String text;
   
   public MyListener2(ImageIcon icon, String text) {
      super(icon);
      this.text = text;
HER ->      addMouseListener(this);
   }
   public void mouseClicked(MouseEvent arg0) {
      System.out.println(text);
   }
....
}

Måske man liiige skulle lave lidt fiddelithut med ImageIcon'et, når man
trykker på det... Uh, det eskalerer, det her.

Nu er det vist tid til at rode med JWindow. Jeg vidste godt, at der var
en Container til den slags, men kunne simpelthen ikke huske, hvad det
var for een. 5 sekunders glanen på API'et for Swing og jeg gad ikke mere *G*

Go' weekend til alle!

/janus

Janus (08-04-2005)
Kommentar
Fra : Janus


Dato : 08-04-05 21:59

Søren Berg Glasius wrote:
> Hej Janus
>
> Du kan selv tilføje en mouse-listener til dit label og så vente på
> klik/dobbeltklik.
>
> Til fremviseren kan du lave et udekoreret vindue vha JWindow. Samtidig
> kan du lave noget "always on top" kode (kan ikke lige huske hvordan) -
> og så kan du lave en mouse-listener som fjerner JWindow'et når der
> klikkes i det. Hvis du tilføjer et JTextArea til dit JWindow, kan du
> disable edit, så har du noget, som kan formatere teksten for dig.
>
> Alt i alt tror jeg det kan gøres rimelig let - har dog ikke selv prøvet
>
> Håber det kan give inspiration til dit projekt.
>
> MVN og god weekend,
> Søren
>

Angående JWindow:

Lader min udgave implementere FocusListener
I focusGained og focusLost kalder jeg this.dispose(), hvilket virker
fint... indtil får en ny instans til at fremkomme (ved at trykke på mit
spørgsmålstegn igen). Så popper den nye instans af JWindow'et op sammen
med den tidligere... meget irriterende!

Hvordan får jeg lukket skidtet rigtigt?

vh Janus

---

public class HelpWindow extends JWindow implements FocusListener {


   public HelpWindow(String text, Point xy) {
      super();
      this.text = text;
      this.point = xy;
      
      // ** set up components
      // **
      field = new JTextArea(3, 20);
      field.setBackground(Color.ORANGE);
      pane = new JScrollPane(field, JScrollPane.VERTICAL_SCROLLBAR_NEVER,
                            JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
      field.setText(text);
      field.setBorder(BorderFactory.createLineBorder(Color.black));
      field.setEditable(false);
      
      JPanel panel = new JPanel(new BorderLayout());
      panel.add(field, BorderLayout.CENTER);
      this.getContentPane().add(panel);

      // ** add some action
      // **
      field.addFocusListener(this);
      
      // ** show the Help frame
      // **
      this.pack();
      this.setLocation(point);
      this.setEnabled(true);
      this.setVisible(true);

   }
   public void focusGained(FocusEvent arg0) {
      this.dispose();      
   }
   public void focusLost(FocusEvent arg0) {
      this.dispose();
      
   }   
}

Lasse Reichstein Nie~ (08-04-2005)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 08-04-05 08:01

Janus <nospam@nomail.com> writes:

> Jeg har muligheden for at smide en ToolTipText på spørgsmålstegnet,
> men den tekst der skal vises fylder en del, og så vidt jeg kan se, kan
> man ikke lave linieskift i et Tool Tip (?).

man kan putte HTML i sin tooltip-tekst, e.g.,
"<html>This is a<br>multiline<br>tool tip</html>"
Det betyder dog nok at fonten ikke er den samme som for andre tooltips.

Man kan lave multi-linje-tooltips:
<URL:http://www.codeguru.com/java/articles/122.shtml>
Ikke nogen helt ny kode, men den virker vist stadig :)

Google siger der også er et eller andet her:
<URL:http://javafaq.nu/java/free-swing-book/free-swing-book-chapter27.shtml>

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409075
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste