wucher wichtel: Verständnisprobleme

Hallo!
Also bei mir haben sich jetzt einige Fragen angesammelt. Ich hoffe, ihr könnt mir helfen. Danke schonmal im Vorraus!

1. Ich lese mir gerade das Buch "Java ist auch eine Insel" durch. Zu den Eventhandlern gibt es eine Tabelle, die die Auslöser von Eventhandler zeigt (Tabelle 14.2 | Einige Ereignisauslöser). In der letzten Zeile dieser Tabelle steht folgendes:

Eye || Augenzwinkern [Frauen zwinkern doppelt so häufig wie Männer. ] || EyelidEvent

Nur nochmal zu meiner Sicherheit: Das ist ironisch gemeint, oder? ;-)

2. Wie ist es möglich, dass man in Java z.B. den Text von JLabel per HTML formatieren kann? Ich meine, wieso macht man soetwas? Ich bin sehr überrascht ;-) Hat mir jemand dazu einen Link oder eine Erklärung, warum HTML dazu benutzt wird, und wie das umgesetzt wird? Also hat Java einen eigenen kleinen Browser?

Jetzt haben sich für mich noch 2 Fragen aufgeworfen, die ganz direkt etwas mit einem Java-Programm zutun haben.

3. Ich habe mir ein Miniprogramm zusammengebastelt. Und zwar soll es 2 JButtons erstellen. Der erste (b) hat einen vordefinierten Text. Der Text des zweiten Buttons soll dann der Text des ersten mit dem Anhängsel "Nr.2" sein.
Das Problem ist, dass der erste Button ersetzt wird, und nur der zweite Button dargestellt wird. Warum macht Java das?

4. Und jetzt zu meinem letzten Problem. Aus mir unbekannten Gründen habe ich "Setzen Sie diesem Elend ein Ende!" als Text für den JButton b gewählt ;-)
Jetzt wollte ich diesen Text umändern und zwar in "Button". Aber diese Änderung ignoriert Java vollkommen. Es zeigt immer nur den zweiten JButton (siehe 3.) mit dem Text "Setzen Sie diesem Elend ein Ende! Nr.2" an.
Warum macht Java das?

Vielen Dank für eure Hilfe!
ciao, ww

PS: Hier kommt noch der Quellcode der Klasse JButtonDemo

  
import java.awt.event.*;  
import javax.swing.*;  
  
public class JButtonDemo {  
  
    public static void main(String[] args){  
        String bez;  
        JFrame frame = new JFrame();  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  
        JButton b = new JButton("Button");  
        JButton c = new JButton();  
        frame.add(b);  
        frame.add(c);  
  
        bez = b.getText();  
        c.setText(bez + " Nr.2");  
  
        ActionListener al = new ActionListener() {  
            public void actionPerformed( ActionEvent e ) {  
                System.exit(0);  
            }  
        };  
    b.addActionListener(al);  
    c.addActionListener(al);  
  
    frame.pack();  
    frame.setVisible(true);  
    }  
}  

  1. Hallo,

    Eye || Augenzwinkern [Frauen zwinkern doppelt so häufig wie Männer. ] || EyelidEvent
    Nur nochmal zu meiner Sicherheit: Das ist ironisch gemeint, oder? ;-)

    Ja, allerdings kann man durchaus ein Objekt namens Eye programmieren, welches ein EyelidEvent auslösen könnte. Man müsste dazu nur AWTEvent entsprechend (was auch immer ein EyelidEvent speziell sein könnte) erweitern.

    1. Wie ist es möglich, dass man in Java z.B. den Text von JLabel per HTML formatieren kann? Ich meine, wieso macht man soetwas?

    Als man das Textformatieren für Java-Komponenten andachte, wurde HTML wohl noch als _die_ sehr einfache Möglichkeit zur Textformatierung angesehen. Deshalb wurde ziemlich zeitig ein HTML-Parser implementiert, der bei Swing-Components nun genutzt werden kann. Wie einfach es ist, mit Java einen Browser zu realisieren, siehst Du hier: http://www.galileocomputing.de/openbook/javainsel6/javainsel_14_016.htm#mjae195fa969346d98709dc3bb022f3cc0.

    Jetzt haben sich für mich noch 2 Fragen aufgeworfen, die ganz direkt etwas mit einem Java-Programm zutun haben.

    1. Ich habe mir ein Miniprogramm zusammengebastelt. Und zwar soll es 2 JButtons erstellen. Der erste (b) hat einen vordefinierten Text. Der Text des zweiten Buttons soll dann der Text des ersten mit dem Anhängsel "Nr.2" sein.
      Das Problem ist, dass der erste Button ersetzt wird, und nur der zweite Button dargestellt wird. Warum macht Java das?

    Du legst mit
    ...

    frame.add(b);
            frame.add(c);

    ...
    die Buttons a und b direkt auf die contentPane des JFrames. Bei http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JFrame.html findest Du:
    ...
    The default content pane will have a BorderLayout manager set on it.
    ...
    Das heißt, der Standard-Layoutmanager des JFrames ist ein Border-Layout-Manager. Für diesen musst Du bei [container].add() noch angeben, wo die Komponente im Kontainer plaziert werden soll. Bsp.:
    ...
    import java.awt.*;
    ...
            frame.add(b, BorderLayout.NORTH);
            frame.add(c, BorderLayout.SOUTH);
    ...

    Beschäftige Dich also noch mit Layoutmanagern.

    Den Punkt 4. kann ich nicht nachvollziehen.

    viele Grüße

    Axel

  2. Hej,

    In der letzten Zeile dieser Tabelle steht folgendes:

    Eye || Augenzwinkern [Frauen zwinkern doppelt so häufig wie Männer. ] || EyelidEvent

    Nur nochmal zu meiner Sicherheit: Das ist ironisch gemeint, oder? ;-)

    Ob es ironisch zu verstehen war bezweifel ich, aber AFAIK kennt Swing keine Klassen Eye oder EyelidEvent. Somit war es wahrscheinlich eine didaktisch-spaßige Erläuterung zu einem recht anschaulichem Aspekt von Java, wie Christian Ullenboom sie immer wieder fallen lässt.

    1. Wie ist es möglich, dass man in Java z.B. den Text von JLabel per HTML formatieren kann?

    Dadurch dass es implementiert wurde ;)

    Ich meine, wieso macht man soetwas?

    Weil html zusammen mit css eine recht einfache und dazu etablierte Möglichkeit darstellt um Text formatiert darzustellen. Wenn du den Text formatieren möchtest, ist es eben einfacher ihn selber auszuzeichnen als für jede Formatierung am besten noch eine Klasse zu instanzieren und mit Methoden drauf zuzugreifen. So wird also eine recht effiziente Trennung von Programmlogik und Darstellungslogik ereicht.

    Also hat Java einen eigenen kleinen Browser?

    Das würde ich nicht als solchen bezeichnen, aber zuimdest verfügt Swing über eine kleine Rendering-Engine.

    Das Problem ist, dass der erste Button ersetzt wird, und nur der zweite Button dargestellt wird. Warum macht Java das?

    Weil du deinem Frame keinen Layout-Manager hinzugefügt hast. Daher kann es nicht mehreren Komponenten umgehen und ersetzt die letze bei jedem add() wieder.

    Jetzt wollte ich diesen Text umändern und zwar in "Button". Aber diese Änderung ignoriert Java vollkommen.

    Dein Code zeigt nicht wie du das tust. Grundsätzlich gilt, dass du Änderungen an Komponenten wenn sie bereits sichtbar sind, erst dadurch sichtbar machst, dass du die Komponente mit repaint() auch neu zeichnest.

    Beste Grüße
    Biesterfeld

    --
    Art.1: Et es wie et es
    Art.2: Et kütt wie et kütt
    Art.3: Et hätt noch immer jot jejange
    Das Kölsche Grundgesetz
    1. Hallo!

      Also hat Java einen eigenen kleinen Browser?

      Das würde ich nicht als solchen bezeichnen, aber zuimdest verfügt Swing über eine kleine Rendering-Engine.

      Mein ich doch ;) Mir ist das Wort nicht mehr eingefallen... :)

      Das Problem ist, dass der erste Button ersetzt wird, und nur der zweite Button dargestellt wird. Warum macht Java das?

      Weil du deinem Frame keinen Layout-Manager hinzugefügt hast. Daher kann es nicht mehreren Komponenten umgehen und ersetzt die letze bei jedem add() wieder.

      Ok! Vielen Dank. Jetzt klappt es.

      Jetzt wollte ich diesen Text umändern und zwar in "Button". Aber diese Änderung ignoriert Java vollkommen.

      Dein Code zeigt nicht wie du das tust. Grundsätzlich gilt, dass du Änderungen an Komponenten wenn sie bereits sichtbar sind, erst dadurch sichtbar machst, dass du die Komponente mit repaint() auch neu zeichnest.

      Es ist viel einfacher, als du denkst. Ich schreibe einfach nur

      JButton b = new JButton("Button");

      anstatt

      JButton b = new JButton("Viel Text");

      Aber irgendwie spinnt entweder NetBeans oder der Computer oder irgendwas. Jedenfalls habe ich die Klasse umbenannt und in einer anderen Datei gespeichert, und da klappt das wunderbar.

      Vielen Dank für eure Hilfe!
      ciao, ww

      1. Hej,

        Es ist viel einfacher, als du denkst. Ich schreibe einfach nur

        JButton b = new JButton("Button");

        anstatt

        JButton b = new JButton("Viel Text");

        Aber irgendwie spinnt entweder NetBeans oder der Computer oder irgendwas.

        Hört sich so an, als wenn dein On-The-Fly-Compiler nicht aktiviert ist. Kenn mich aber auch mit NetBeans nicht so aus, in Eclipse wäre diese Fuktionalität per default aktiviert.

        Beste Grüße
        Biesterfeld

        --
        Art.1: Et es wie et es
        Art.2: Et kütt wie et kütt
        Art.3: Et hätt noch immer jot jejange
        Das Kölsche Grundgesetz