jComboBox mit Stilmitteln

Anleitungen, Beispiele und Hilfestellungen zu NetBeans

Moderator: wegus

Antworten
almust
Beiträge: 2
Registriert: 13.03.2013, 09:50

jComboBox mit Stilmitteln

Beitrag von almust » 06.04.2013, 00:46

Hallo zusammen,
ich muss ein Info-Projekt für die Schule fertig stellen, wo man von einer ComboBox ein Rhetorsiches Stilmittel aussucht und dann dazu die jeweilige Erklärung in einem jTextField angezeigt wird. Aber leider hab ich sehr große Probleme damit, da ich sehr unerfahren im Ungang mit Netbeans bin.

Die Stilmittel hab ich unter den Properties bei der ComboBox unter "model" reingeschrieben.

Mein Problem ist:
Wie kann ich den rein geschriebenen Sachen jeweils eine Zahl zu ordnen lassen, sodass ich sagen kann bei der und der Zahl soll dann diese Erklärung im TexField erscheinen.

Ich hatte da an eine If-Verzweigung gedacht, wäre dies logisch?
Oder habt ihr noch andere Ideen, wie ich das machen könnte?

UND BITTE: Nur mit Erklärungen würde ich nicht weiter kommen. Ich würde mich sehr darüber freuen, wenn ihr mir das mit Quellcode anzeigen könntet...

DANKE SCHON MAL IM VORAUS!!

Benutzeravatar
nigjo
Beiträge: 640
Registriert: 08.09.2009, 09:43
Wohnort: Aachen
Kontaktdaten:

Re: jComboBox mit Stilmitteln

Beitrag von nigjo » 06.04.2013, 11:27

Hi almust
almust hat geschrieben:UND BITTE: Nur mit Erklärungen würde ich nicht weiter kommen. Ich würde mich sehr darüber freuen, wenn ihr mir das mit Quellcode anzeigen könntet...
Ich fürchte du wirst hier kein fertiges Programm bekommen. Das würde ja auch den Sinn einer Hausaufgabe widersprechen.

Das was du dir anschauen solltest ist das ComboBoxModel. Das Standardmodel, das der Matisse (=Der GUI Editor) erstellt, verwendet Strings als Einträge.
almust hat geschrieben:Ich hatte da an eine If-Verzweigung gedacht, wäre dies logisch?
Im Prinzip ja. Seit Java 7 kann man die Strings aus dem Model aber viel einfacher mit einer Switch-Anweisung (siehe http://openbook.galileocomputing.de/jav ... 90a01d8aa9) verarbeiten. Dann brauchst du auch nicht zwingend die Einträge nummerieren. Je nach Eintrag aus der Combobox ("getSelectedItem()") kannst du dann einen anderen Text in das JTextField schreiben. Das ganze passiert dann im ActionEvent der Combobox (im "Event"-Reiter in den Eigenschaften)

Gruß
Jens
Man sollte seine Werkzeuge kennen. Ansonsten haut man sich mit dem Hammer nur auf die Finger.

--
NetBeans Certified Engineer - Java Getriebe

Benutzeravatar
Olek77
Beiträge: 669
Registriert: 21.03.2009, 13:09

Re: jComboBox mit Stilmitteln

Beitrag von Olek77 » 07.04.2013, 15:24

Hi,

Du könntest deine Stilmittel auch in ner Map ablegen.
z.B.:

Code: Alles auswählen

// Verwende Interface Map anstelle von konkreter Imlementierung als Typ, das ist flexibler wenn man später die konkrete
// Art ändern will. Der Diamant-Operator(<>) geht nur ab java 1.7, sonst : new HashMap<Integer, String>();
private final Map<Integer, String> map = new HashMap<>(); // 
// Array mit den Stilmitteln
private final String[] stilMittel = {  "Metapher", "Onomatopoesie", "Alliteration" };

private void init() {
   for( int i = 0; i < stilMittel.length;i++ ) {
       map.put( Integer.valueOf( i ), stilMittel[i] );
   }
}

// ... 

private void createUI() {
   //...
   JComboBox cbox = new JComboBox( map.values() );

   //...
}

Über den gewählten Index deiner ComboBox ( siehe API javax.swing.JComboBox ), kannst du
das Stilmittel erfragen

In welcher Klasse bist du denn?

Viele Grüße,

Olek
- Netbeans Certified Associate -

almust
Beiträge: 2
Registriert: 13.03.2013, 09:50

Re: jComboBox mit Stilmitteln

Beitrag von almust » 07.04.2013, 19:39

Danke euch beiden für eure Antworten,
nigjo hat geschrieben: Ich fürchte du wirst hier kein fertiges Programm bekommen. Das würde ja auch den Sinn einer Hausaufgabe widersprechen.
Ich wollte kein fertiges Programm, nur den kompletten Befehl sehen, wenn ich einen Tipp bekommen, da ich schon öfters von dem Befehl getSelectedItem gelesen hab aber das bei mir irgendwie gar nicht funktioniert hat... :/
Ich weiß nicht, wo der Fehler liegt.
Olek77 hat geschrieben:In welcher Klasse bist du denn?
Ich bin in der Einführungsphase, also zehnte Klasse.

Viele Grüße

almust

ebaumann
Beiträge: 288
Registriert: 22.01.2009, 08:53
Wohnort: Würzburg
Kontaktdaten:

Re: jComboBox mit Stilmitteln

Beitrag von ebaumann » 08.04.2013, 08:52

Ich würde Stilmittel-Objekte in die ComboBox setzen:

Code: Alles auswählen

public final class Stilmittel {

    private final String name;
    private final String erklaerung;

    public Stilmittel(String name, String erklaerung) {
        this.name = name;
        this.erklaerung = erklaerung;
    }

    public String getName() {
        return name;
    }

    public String getErklaerung() {
        return erklaerung;
    }

    @Override
    public String toString() {
        return name;
    }
}
Wie du die Stilmittel erzeugst, lässt sich variieren, voerst vielleicht im Code, später aus einer Properties-Datei oder Datenbank. Entscheidend ist, dass das Model dieses Typs ist und dass toString() liefert, was in der ComboBox als Text angezeigt werden soll - später wirst du dafür vielleicht einen Renderer implementieren.

Code: Alles auswählen

ComboBoxModel<Stilmittel> model = new DefaultComboBoxModel<Stilmittel>(new Stilmittel[]{
                new Stilmittel("Alliteration", "Die Alliteration ist ..."),
                new Stilmittel("Metapher", "...")
                });
Dieses Model setzt du dann in die JComboBox. Im GUI-Editor klickst du unter "model" "Reset to Default" und im Code kannst du nach "initComponents()" dieses Model mit comboBox.setModel() setzen oder auch im GUI-Editor, falls es *vor" initComponents() erzeugt wurde als "Custom Code", du kannst auch gleich alles ab "new DefaultComboBoxModel..." eintippen. Nun muss noch bei Auswahl eines Items das Textfeld gesetzt werden: Im GUI-Editor ComboBox auswählen, "Events" und actionPerformed (itemStateChanged wäre auch möglich). Noch einfacher: Doppelklick auf die ComboBox erzeugt automatisch eine actionPerformed-Methode. In der Action-Methode holst du das ausgewählte Item - das ist ein Stilmittel-Objekt und setzt die Erklärung in die TextArea (ein JTextField ist nur für einzeiligen Text geeignet):

Code: Alles auswählen

Stilmittel stilmittel = (Stilmittel) comboBox.getSelectedItem();
textArea.setText(stilmittel.getErklaerung());

Benutzeravatar
Olek77
Beiträge: 669
Registriert: 21.03.2009, 13:09

Re: jComboBox mit Stilmitteln

Beitrag von Olek77 » 08.04.2013, 13:23

Hallo,
Ich würde Stilmittel-Objekte in die ComboBox setzen
Das ist eine gute Idee. Ich hatte ganz am Anfang an ein Enum gedacht, aber so kann man eigentlich noch
besser den OO-Gedanken verfolgen.

Z.B. kann man ein Interface Sprachelemente anlegen

Code: Alles auswählen

/** verwende das Suffix <i>IF</i> um die Klasse als Suffix im Editor leichter erkenntlich zu machen. */
public interface SprachElementeIF {
   // habe mal englische Namen verwendet
   String getDescription();

   String getName();
    
   /** "Spaßmethode" */
   boolean isRarelyUsedToday(); 
}
Die Klasse Stilmittel kann das Interface nun implementieren und später können neue Sprachelemente hinzugefügt werden, die auch
dieses Interface implementieren.

also

Code: Alles auswählen

public final class Stilmittel implements SprachElementIF {

//...

    @override
    public String getName() {
        return name;
    }
    
    @override
    public String getDescription() {
        return erklaerung;
    }
    @override
    boolean isRarelyUsedToday() {
        return true;
    }
}
Ist es nicht schön, wie viele Möglichkeiten es meistens gibt ein Ziel zu erreichen? ;)

Viele Grüße,

Olek
- Netbeans Certified Associate -

ebaumann
Beiträge: 288
Registriert: 22.01.2009, 08:53
Wohnort: Würzburg
Kontaktdaten:

Re: jComboBox mit Stilmitteln

Beitrag von ebaumann » 09.04.2013, 08:48

Olek77 hat geschrieben:Z.B. kann man ein Interface Sprachelemente anlegen
Das Interface ist fast immer die beste Wahl, vor allem in Kombination mit dem Service Provider Interface. So können verschiedene Services unterschiedliche Implementierungen liefern. Das GUI wäre einfacher zu erzeugen und ist vor allem getrennt von der Bereitstellung der Model-Elemente:

Code: Alles auswählen

Collection<? extends SprachElement> sprachElemente = Lookup.getDefault().lookupAll(SprachElement.class);
ComboBoxModel<SprachElement> model = new DefaultComboBoxModel<>(sprachElemente.toArray(new SprachElement[sprachElemente.size()]));
Die Anwendung ist modular erweiterbar. Es könnte ein Modul Stilmittel geben und eines, das Begriffe der Programmiersprache Java enthält. Oder es gibt mehrere Stilmittel-Provider, einen, der aus einer Datenbank liest und einen, der in einem Web-Wörterbuch nachschlägt. Das GUI muss nicht mehr modifiziert werden, unterschiedliche Programmierer können unabhängig Sprachelemente nach eigenen Vorstellungen liefern:

Code: Alles auswählen

@ServiceProvider(service = SprachElement.class)
public final class Stilmittel implements SprachElement {
    ... // liefert Stilmittel
}

@ServiceProvider(service = SprachElement.class)
public final class ProgrammierSpracheJava implements SprachElement {
    ...
}

Antworten