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 ein alternativer Browser verwenden.
Array Componenten auf Buttonklick nacheinander ausgeben.
Ich möchte das auf Klick auf einen Button die Strings nacheinander in einem Textlabel erscheinen, ungefähr so:
nicht geklickt = hier steht erstmal standatmäßig "Hallo" im Lable(könnte aber auch leer sein)
erster klick = Button wurde 1 mal geklickt
zweiter klick= Button wurde 2 mal geklickt
u.s.w.
[HIGHLIGHT="Java"]import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class ohjea {
public static void main(String[] args) {
JFrame main = new JFrame("Ohja, drückmich");
main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
main.setSize(500, 300);
main.setResizable(false);
// main.setLocationRelativeTo(null);
main.getContentPane().setLayout(new GridLayout(2, 1));
JPanel textPanel = new JPanel();
final JLabel text = new JLabel("hallo");
textPanel.add(text);
JPanel klickPanel = new JPanel();
JButton klick = new JButton("Drück Mich");
klick.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String a = "button wurde 1 mal geklickt";
String b = "button wurde 2 mal geklickt";
String c = "button wurde 3 mal geklickt";
String[] myArray = { a,b,c };
for (int i = 0; i < myArray.length; i++)
Is sicher auch ein Fehler, hat aber mit der Sache ansich nix zu tun denk ich. Das Prog läuft ja. Es wird nur nicht das ausgegeben was ich gern hätte.
In der Konsole (wenn ich die Zeile dekomentiere) wird der gesammte Inhalt des Arrays ausgegeben. In meinem Label nur der letzte Wert(Liegt wohl eifach am Label, Textarea statt Label hätte vermutlich den selben Effekt wie die Konsole).
Mit wenig Änderung: [HIGHLIGHT="Java"]klick.addActionListener(new ActionListener() {
int numberOfClicks = 0;
@Override
public void actionPerformed(ActionEvent e) {
String a = "button wurde 1 mal geklickt";
String b = "button wurde 2 mal geklickt";
String c = "button wurde 3 mal geklickt";
String[] myArray = { a, b, c };
text.setText(myArray[(numberOfClicks++) % myArray.length]);
}
});[/HIGHLIGHT]
Ob das jetzt schöner Stil ist, lässt sich natürlich streiten (was kein Aufruf sein soll).
Wenn du aber immer nur dastehen haben willst:
"Der Button wurde X mal geklickt"
Dann brauchst du natürlich ne andere Lösung. (einfach den counter für X einsetzen anstatt ein String Array zu machen...)
Mit wenig Änderung: [HIGHLIGHT="Java"]klick.addActionListener(new ActionListener() {
int numberOfClicks = 0;
@Override
public void actionPerformed(ActionEvent e) {
String a = "button wurde 1 mal geklickt";
String b = "button wurde 2 mal geklickt";
String c = "button wurde 3 mal geklickt";
String[] myArray = { a, b, c };
text.setText(myArray[(numberOfClicks++) % myArray.length]);
}
});[/HIGHLIGHT]
Ob das jetzt schöner Stil ist, lässt sich natürlich streiten (was kein Aufruf sein soll).
Stil ist ja erstmal egal. Ich will ja was lernen. Und das hier funzt mal ganz super.Danki
Wenn ich das ganze jetzt noch irgendwie dazu überreden kann beim letzten Klick (abhängig davon wie groß mein Array ist) wieder von vorn anzufangen, wärsrichtig toll.
Also mal in meinem Anfängerisch:
If das Ende des Arrays erreicht
text.setText("ok dann nochmal von vorn");
und dann gehts von vorn wieder los.
Wenn ich das ganze jetzt noch irgendwie dazu überreden kann beim letzten Klick (abhängig davon wie groß mein Array ist) wieder von vorn anzufangen, wärsrichtig toll.
So ist's. Ich weiß vorher was Zaphi will.
Besser noch, wenn es nie zu einem Überlauf kommen kann (allerdings müsste man dann ne Menge Gedult zum Klicken haben): [HIGHLIGHT="Java"]numberOfClicks = (numberOfClicks + 1) % myArray.length;
text.setText(myArray[numberOfClicks]);[/HIGHLIGHT]