Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Ich habe dieses Buch, hochladen darf ich es hier glaube ich nicht, oder?
Und ich komme mit diesem Buch einfach nicht weiter, versuche so eine einfache
Listenwahl hinzubekommen, aber ich bekomme es einfach nicht hin -.-
Ich habe mir vorerst erlaubt deinen Code zu formatieren, das konnte ja keiner lesen
Code:
package paket1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Hallo1{
public static void main (String[] args){
JFrame Rahmen = new JFrame("Hallo, wie geht es?");
Rahmen.setSize(500,400);
Rahmen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel Platte = new JPanel ();
Platte.setLayout (new GridLayout());
// Buttons erzeugen
JButton Knopf1 = new JButton("Gut");
JButton Knopf2 = new JButton ("Schlecht");
JButton Knopf3 = new JButton ("Scheisse");
JButton Knopf4 = new JButton ("Aljoscha");
// Schriftart und –größe
Knopf1.setFont(new Font("Arial", 1, 20));
Knopf2.setFont(new Font("Arial", 1, 20));
Knopf3.setFont(new Font("Arial", 1, 30));
Knopf4.setFont(new Font("Arial", 1, 25));
// Buttons mit Ereignissen verknüpfen
Knopf1.addActionListener (new ActionListener(){
public void actionPerformed (ActionEvent x){
JOptionPane.showMessageDialog(null, "Das freut mich!");
}
});
Knopf2.addActionListener (new ActionListener(){
public void actionPerformed (ActionEvent x){
JOptionPane.showMessageDialog(null, "Das tut mir leid!");
}
});
Knopf3.addActionListener (new ActionListener(){
public void actionPerformed (ActionEvent x){
JOptionPane.showMessageDialog(null, "Das ist kacke!");
}
});
Knopf4.addActionListener (new ActionListener(){
public void actionPerformed (ActionEvent x){
JOptionPane.showMessageDialog(null, "Drögemeier!");
}
});
// Alles einsetzen und sichtbar machen
Platte.add (Knopf1);
Platte.add (Knopf2);
Platte.add (Knopf3);
Platte.add (Knopf4);
Rahmen.setContentPane (Platte);
Rahmen.setVisible (true);
}
}
Ergänzung ()
Nun zum eigentlichen Problem:
Dein Code stellt eine Liste von 4 Buttons dar, die jeweils beim daraufklicken einen kleinen Dialog aufmachen.
Da die Aufgabe aber scheinbar lautet eine ComboBox mit Daten zu befüllen und diese darzustellen ist ungefähr 90% hiervon überflüssig
JButton ist eine der Standardkomponenten von Swing, eine JComboBox übrigens auch, hier findest du eine kompakte Auflistung: Swing Controls
Um besser verstehen zu können wie eine ComboBox funktioniert können wir einerseits die API zur Rate ziehen: JComboBox API und/oder das dazugehörige Tutorial von Oracle: JComboBox tutorial
Prinzipiell kann man alles in eine ComboBox reinpacken, da dies aber nicht sinnvoll ist und sehr aufwändig wäre gehe ich davon aus dass wir in der ComboBox keine Buttons haben wollen
Wir werden die ComboBox einfach ganz klassisch mit Strings befüllen.
Code:
import javax.swing.*;
public class ComboBoxExample {
public static void main(String[] args) {
new ComboBoxExample();
}
public ComboBoxExample() {
//Option 1: item list as constructor parameter
String[] items = new String[] {"Spring", "Summer", "Fall", "Winter"};
JComboBox comboBox = new JComboBox(items);
showInFrame(comboBox);
//Option 2: add items to the combobox afterwards using provided methods
JComboBox otherComboBox = new JComboBox();
otherComboBox.addItem("Red");
otherComboBox.addItem("Green");
otherComboBox.addItem("Blue");
showInFrame(otherComboBox);
}
public static void showInFrame(JComponent component) {
JFrame frame = new JFrame();
frame.setSize(200, 70);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(component);
frame.setVisible(true);
}
}
@Hinweis: Beide Fenster liegen initial übereinander
Hier noch ein paar Tipps:
1. Programmieren und Lernmaterial IMMER auf englisch
Wenn du es auf Deutsch tust musst du dich mit 3 statt 2 Sprachen beschäftigen, abgesehen davon sind die besten Hilfeartikel, APIs, Blogs, Hilfeseiten(StackOverflow), Bücher usw. usf. alle auf englisch. (Und es gibt keine Buchpreisbindung auf englische Bücher )
2. Solange du die Sprache nicht beherrschst solltest du die Finger von jeglichen Benutzerinterfaces lassen.
Solche Bsp. werden gerne verwendet um schnelle "Lernerfolge" zu erzielen, sind aber beim erlernen der Sprache einfach nur hinderlich.
In deinem Beispiel oben gibt es eine Unmenge an Konfiguration die 'nötig' ist um effektiv 4 Schaltflächen darzustellen, gelernt hat man dabei kaum etwas.
Auch in meinem Bsp. bezieht sich der meiste Code auf das Uralt-Framework "Swing", das jetzt noch zu erlernen obwohl der Nachfolger (JavaFX) seit 5 Jahren verfügbar ist macht mMn. keinen Sinn.
Versuche vllt mal folgendes: http://codingbat.com/java
Hier gibt es Aufgaben die sich vor allem auf Grundlagen beziehen, wenn du nicht weiter weißt ist Google dein bester Freund.
Wenn ihr den Quelltext in java eingebt und ausgebt werden ihr schon sehen was dann kommt.
Und jetzt muss noch eingebaut werden, dass man halt aus einer Liste, bestimme Begriffe auswählen kann,
dann ist das Problem -.-
Im Bsp. oben kannst du sehr wohl etwas aus der Liste auswählen.
Wenn du darauf hinaus willst dass nach dem auswälen 'nichts' passiert, das ist schon richtig so
Zwecks Proof-of-Concept können wir das obige Beispiel natürlich etwas erweitern und auf die Auswahl sofort reagieren.
Swing verwendet hierzu das Observer-Pattern (alternativ Listener-Pattern), für uns heißt das:
1. Wir müssen einen Listener implementieren:
einfache Variante Mithilfe einer anonymen Klasse, die ComboBox muss sich im gleichen Scope befinden:
Code:
ActionListener someActionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, comboBox.getSelectedItem());
}
};
2. diesen in der ComboBox anmelden:
Code:
comboBox.addActionListener(someActionListener);
Insgesamt sieht das dann so aus:
Code:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ComboBoxExample {
public static void main(String[] args) {
new ComboBoxExample();
}
public ComboBoxExample() {
String[] items = new String[] {"Spring", "Summer", "Fall", "Winter"};
JComboBox comboBox = new JComboBox(items);
ActionListener someActionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, comboBox.getSelectedItem());
}
};
comboBox.addActionListener(someActionListener);
showInFrame(comboBox);
}
public static void showInFrame(JComponent component) {
JFrame frame = new JFrame();
frame.setSize(200, 70);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(component);
frame.setVisible(true);
}
}
Die einfachste Variante wäre, die englischen durch deutsche Wörter zu ersetzen und den String "Es ist " vor das ausgewählte Item zu setzen. Strings kannst du mit dem +-Operator verbinden.
Ich bekomm das einfach nicht hin, dass wenn ich auf "Spring" klicke, dass dann "Es ist Frühling ausgeben wird".
Ich weiss nicht was ich an welcher Stelle schreiben muss.
In meinem Code ganz oben hab ich es geschafft, dass eine Message beim anklicken eines Begriffes angezeigt wird, aber ich bekomme das im Code von pmkrefeld einfach nicht eingebaut.
D.h. du hast keinen Plan was der Code, den du gerade kopiert hast, überhaupt macht? Wenn ich dir jetzt sage, wie du die Ausgabe hinbekommen kannst, hast du zwar ein Erfolgserlebnis, wirst bei der nächsten Aufgabe aber wieder dumm aus der Wäsche schauen, da du nichts gelernt hast. Du kannst genau so gut einen Programmierer anheuern, der für dich programmiert.
Oder du lernst erst mal richtig Java (ich glaub hier gibt es immer noch den angepinnten Thread mit weiterführenden Informationen). Lern die Grundlagen der Programmierung, z.B. was eine Stringkonkatenation ist (klingt komplizierter als es ist).
Und wie stellt du dir vor, Java zu lernen? Code abschreiben funktioniert offenbar nicht. Im hier angepinnten Thread gibt es kostenlose Lektüre zu Java, da dürften mehr Informationen drin stehen, als in deinem Buch.
Ich kann dir gerne weiterhelfen, aber mit Problembeschreibungen wie "geht nicht" und "weis nicht" ist das recht schwer. Zudem antwortest du mir auch nicht auf meine Fragen.
Sehe gerade deine Änderung. Wenn du den Code von pmkrefeld nich verstehst, lass es. Arbeite an deinem Code. Verstehe deinen Code.
Die Anzeige der MessageBox hast du ja geschafft. Wenn du verstehst, wie diese Box funktioniert (und Stringkonkatenation), solltest du wenig Probleme haben, den Text zu verändern.
Wie gesagt, da du anscheinend Java nicht beherrscht (nicht weiter schlimm) solltest du die Finger von jeglichen Benutzeroberflächen lassen und mit einfachen Kommandozeilenausgaben anfangen.
Im Code oben gibt es viele Konzepte die für einen Anfänger einfach zu viel sind, obwohl das Beispiel so kurz ist arbeiten wir darin bereits mit 2 Frameworks (AWT, Swing) und einigen Fortgeschrittenen Konzepten (Anonyme Klassen, Listener-Pattern) ich denke auch dass auf deinem Niveau auch die Main-Methode nach Kauderwelsch ausschaut.
Wenn ich dir eine Reihenfolge vorgeben darf:
- primitive Datentypen (int, long, float, double, boolean, char), welche Daten sie halten und welche Operationen auf Ihnen ausgeführt werden
- logische (&&, ||) und binäre Operatoren (&, |, >, <, <<, >>).
- trinärer Operator ?.
- if Bedingung
- Arrays
- Listen
- Maps
- for und for-each Schleifen
- Klassen
- Sichtbarkeit (public, private, protected)
- Modifikatoren (static, final)
- Interfaces
- Kapselung
- Vererbung
- Composition over Inheritance
- Optional noch generics und lambda-Expressions (Fortgeschritten)
Wenn du diese Grundlagen drauf hast, dann und erst dann kannst du sinnvoll kleine Programme schreiben.
Halte durch, die Welt braucht programmierrer
Hier hast du das Standardwerk was Java angeht, erstmal geht es darum die Sprache und die Konzepte kennezulernen, nicht darum ein paar hübsche Benutzeroberflächen zusammenzuklicken.
Dort findest du alle Punkte erklärt die ich angesprochen habe, wenn du erst einmal soweit bist wirst viele Aufgaben und Bsp. viel besser verstehen können und kommst so weiter. Ohne diese Grundlagen einfach "nen eigenen Code schreiben" ist meiner Meinung nach nicht möglich.