Array aus Numberfield Eingaben

Jana2207

Mitglied
Hallo ihr Lieben,
ich versuche gerade was zu erstellen und es will nicht so recht gelingen. Also ich programmiere mit dem Java-Editor (Vorgabe der Schule). Wir haben eine GUI erstellt und dort sind numberfields und ein Button. Wenn der Button gedrückt wird, soll das Programm ein Array beim Wert null mit der Eingabe des numberfields befüllen, auf die nächste Stelle gehen (dann 1) und das numberfield leeren. Bei der nächsten Eingabe soll dann auf Index 1 gespeichert werden und so weiter.
Klappt aber irgendwie nicht. Jemand ne Idee?
Lg Jana
 
Java:
import java.awt.*;
import java.awt.event.*;

/**
 *
 * Beschreibung
 *
 * @version 1.0 vom 19.01.2024
 * @author
 */

public class Versuch2 extends Frame {
  // Anfang Attribute
  private NumberField nummer = new NumberField();
  private Button button = new Button();
  // Ende Attribute
 
  public Versuch2() {
    // Frame init
    super();
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { dispose(); }
    });
    int frameWidth = 300;
    int frameHeight = 300;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setTitle("Versuch2");
    setResizable(false);
    Panel cp = new Panel(null);
    add(cp);
    // Anfang Komponenten
    
    nummer.setBounds(16, 16, 41, 41);
    cp.add(nummer);
    button.setBounds(104, 160, 32, 16);
    button.setLabel("Button");
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button_ActionPerformed(evt);
      }
    });
    cp.add(button);
    // Ende Komponenten
    
    setVisible(true);
  } // end of public Versuch2
 
  // Anfang Methoden
 
  public static void main(String[] args) {
    new Versuch2();
  } // end of main
 
  public void button_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    int[] my = new int[5];
    for (int i = 0; i<5 ; i++ ) {
        
        my[i] = nummer.getInt();
        

    } // end of for
    System.out.println("eingaben");
      for(int i : my) {
        System.out.println(i + " ");
      }
  } // end of button_ActionPerformed

  // Ende Methoden
} // end of class Versuch2
 
Java:
import java.awt.*;
import java.awt.event.*;

/**
 *
 * Beschreibung
 *
 * @version 1.0 vom 19.01.2024
 * @author
 */

public class Versuch2 extends Frame {
  // Anfang Attribute
  private NumberField nummer = new NumberField();
  private Button button = new Button();
  // Ende Attribute
 
  public Versuch2() {
    // Frame init
    super();
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { dispose(); }
    });
    int frameWidth = 300;
    int frameHeight = 300;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setTitle("Versuch2");
    setResizable(false);
    Panel cp = new Panel(null);
    add(cp);
    // Anfang Komponenten
   
    nummer.setBounds(16, 16, 41, 41);
    cp.add(nummer);
    button.setBounds(104, 160, 32, 16);
    button.setLabel("Button");
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        button_ActionPerformed(evt);
      }
    });
    cp.add(button);
    // Ende Komponenten
   
    setVisible(true);
  } // end of public Versuch2
 
  // Anfang Methoden
 
  public static void main(String[] args) {
    new Versuch2();
  } // end of main
 
  public void button_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    int[] my = new int[5];
    for (int i = 0; i<5 ; i++ ) {
       
        my[i] = nummer.getInt();
       

    } // end of for
    System.out.println("eingaben");
      for(int i : my) {
        System.out.println(i + " ");
      }
  } // end of button_ActionPerformed

  // Ende Methoden
} // end of class Versuch2
habe das ganze mal verkürzt dargestellt. Er speichert aktuell in allen Positionen des Arrays den wert, den der erste künde eingibt über das Feld und mit dem Button auslöst.
Ich hätte aber ganz gerne, dass er nach jedem künden eine Position weiter geht und dann 5 verschiedene werte eingegeben und gespeichert werden. Jmd ne Idee?
LG
 
Ich hätte aber ganz gerne, dass er nach jedem künden eine Position weiter geht und dann 5 verschiedene werte eingegeben und gespeichert werden. Jmd ne Idee?
Meinst Du in etwa so?
Java:
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class StartNumberInput {

    public static void main(String[] args) {
        int width = 300;
        int height = 300;
        Frame frame = createFrame("Nummer Eingabe", width, height);
        NumberInputPanel panel = new NumberInputPanel(width, height);
        frame.add(panel);
        frame.setVisible(true);
    }

    private static Frame createFrame(String titel, int width, int height) {
        Frame frame = new Frame(titel);
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent evt) {
                frame.dispose();
            }
        });
        frame.setSize(width, height);
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        int x = (dim.width - width) / 2;
        int y = (dim.height - height) / 2;
        frame.setLocation(x, y);
        frame.setResizable(false);
        return frame;
    }
}
Java:
import java.awt.Button;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Panel;

@SuppressWarnings("serial")
public class NumberInputPanel extends Panel {
    private NumberField inputNumber = new NumberField();
    private Button ok = new Button("ok");
    private int[] numbers = new int[5];
    private int lineSize = 30;
    private int id = 0;

    public NumberInputPanel(int width, int height) {
        setPreferredSize(new Dimension(width, height));
        add(inputNumber);
        inputNumber.setPreferredSize(new Dimension(width / 3, lineSize));
        ok.setPreferredSize(new Dimension(width / 5, lineSize));
        add(ok);
        ok.setFocusable(false);
        setFont(new Font("Courier", Font.BOLD, 25));
        ok.addActionListener(e -> {
            numbers[id] = Integer.parseInt(inputNumber.getText());
            id = (id + 1) % numbers.length;
            inputNumber.setText("");
            repaint();
        });
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        int pointSize = lineSize / 4;
        for (int i = 0; i < numbers.length; i++) {
            g.setColor(Color.BLACK);
            if (id == i)
                g.fillOval(5, (1 + i) * lineSize + 3 * pointSize, pointSize, pointSize);
            g.setColor(Color.RED);
            g.drawString(numbers[i] + "", lineSize, (2 + i) * lineSize);
        }
    }
}
Java:
import java.awt.TextField;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;

@SuppressWarnings("serial")
public class NumberField extends TextField implements TextListener {
    public NumberField() {
        addTextListener(this);
    }

    @Override
    public void textValueChanged(TextEvent e) {
        String txt = getText();
        int id = getCaretPosition();
        for (int i = 0; i < txt.length(); i++) {
            char c = txt.charAt(i);
            if (!Character.isDigit(c)) {
                setText(txt.replaceAll("" + c, ""));
                setCaretPosition(id-1);
                repaint();
                return;
            }
        }
    }
}
 
Zuletzt bearbeitet:
Ok, oh mein Gott 😀
also das Ding ist, das meine Schüler das können sollen und ich hatte iwie gehofft es geht ähnlich dem wie ich es versucht habe, also iwie eine "einfache" Lösung, die die programmiert bekommen mit Hilfestellung 😀
also halt iwie wirklich nur sowas wie:
künde gibt eine zahl im numberfield ein;
künde drückt Button;
programm setzt die zahl aus dem numberfield an die erste stelle des Arrays, leer das numberfield und geht auf die 2 stelle des Arrays;
ein anderer künde gibt eine Zahl ein,
drückt den Button und so weiter..

geht das nicht in einfach 😀

Sorry wenn ich so blöd frage, aber habe das selber auch noch nie gemacht und muss denen das in "kurz" erklären 😀
 
geht das nicht in einfach
Die ganze Logik dafür befindet sich nur in dieser Klasse.

Java:
import java.awt.Button;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Panel;

@SuppressWarnings("serial")
public class NumberInputPanel extends Panel {
    private NumberField inputNumber = new NumberField();
    private Button ok = new Button("ok");
    private int[] numbers = new int[5]; // speichert die eingegeben Zahlen
    private int lineSize = 30; // Zeilenabstand der angezeigten Zahlen
    private int id = 0; // Position für Eingabe der augenblicklichen Zahl

    public NumberInputPanel(int width, int height) {
        setPreferredSize(new Dimension(width, height));
        add(inputNumber);
        inputNumber.setPreferredSize(new Dimension(width / 3, lineSize));
        ok.setPreferredSize(new Dimension(width / 5, lineSize));
        add(ok);
        ok.setFocusable(false);
        setFont(new Font("Courier", Font.BOLD, 25));
        ok.addActionListener(e -> {
            numbers[id] = Integer.parseInt(inputNumber.getText()); // speichere die eingegebene Zahl
            id = (id + 1) % numbers.length; // erhöht die Position für die Zahleneingabe
            inputNumber.setText(""); // löscht das Eingabefeld
            repaint();
        });
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        int pointSize = lineSize / 4;
        for (int i = 0; i < numbers.length; i++) { // zeichne alle Zahlen
            g.setColor(Color.BLACK);
            if (id == i) // Zeichen die Markierung der augenblicklichen Position
                g.fillOval(5, (1 + i) * lineSize + 3 * pointSize, pointSize, pointSize);
            g.setColor(Color.RED);
            g.drawString(numbers[i] + "", lineSize, (2 + i) * lineSize);
        }
    }
}
 
Ach super danke.
Habe das Problem nun gelöst bekommen, siehe Code. Programm läuft, ABER jetzt die Sache: ich habe wie ihr sehen könnt einen JList erstellt, diese soll quasi das nf_tische ersetzen. Soll aber auch in dem array tische gespeichert werden die eingäbe, damit sie dann ausgegeben werden kann..
kann mir da jemand helfen?
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
 *
 * Beschreibung
 *
 * @version 1.0 vom 23.01.2024
 * @author
 */

public class MensaEingabeGUI extends JFrame {
  // Anfang Attribute
  private JLabel lMensaderLazyTownAG1 = new JLabel();
  private JLabel lTischNummer2 = new JLabel();
  private JNumberField nf_tisch = new JNumberField();
  private JLabel lAnzahlEssen1 = new JLabel();
  private JLabel lfreiwilliggezahlterBetrag1 = new JLabel();
  private JNumberField nf_anzahl = new JNumberField();
  private JNumberField nf_betrag = new JNumberField();
  private JButton bAbschicken1 = new JButton();
  private JTextField tf_kreation = new JTextField();
  private JLabel lKreation1 = new JLabel();
  private JList<String> jl_tische = new JList<>();
    private DefaultListModel<String> jl_tischeModel = new DefaultListModel<>();
    private JScrollPane jl_tischeScrollPane = new JScrollPane(jl_tische);
  // Ende Attribute
 
  private int kundenzahl = 0;
  private int [] tisch = new int [5];
  private int [] anzahl = new int [5];
  private double [] betrag = new double [5];
  private String [] kreation = new String [5];
 
  public MensaEingabeGUI() {
    // Frame init
    super();
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 586;
    int frameHeight = 465;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setTitle("MensaEingabeGUI");
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    cp.setBackground(Color.WHITE);
    // Anfang Komponenten
    
    lMensaderLazyTownAG1.setBounds(16, 16, 537, 73);
    lMensaderLazyTownAG1.setText("Mensa der Lazy Town AG");
    lMensaderLazyTownAG1.setFont(new Font("Dialog", Font.BOLD, 26));
    lMensaderLazyTownAG1.setHorizontalAlignment(SwingConstants.CENTER);
    lMensaderLazyTownAG1.setBackground(Color.GREEN);
    cp.add(lMensaderLazyTownAG1);
     lTischNummer2.setBounds(16, 112, 91, 33);
    lTischNummer2.setText("Tisch-Nummer:");
    lTischNummer2.setBackground(new Color(0xC0C0C0));
    cp.add(lTischNummer2);
    nf_tisch.setBounds(120, 112, 41, 33);
    cp.add(nf_tisch);
    lAnzahlEssen1.setBounds(16, 160, 97, 33);
    lAnzahlEssen1.setText("Anzahl Essen:");
    lAnzahlEssen1.setHorizontalAlignment(SwingConstants.CENTER);
    lAnzahlEssen1.setBackground(new Color(0xC0C0C0));
    cp.add(lAnzahlEssen1);
    lfreiwilliggezahlterBetrag1.setBounds(392, 112, 152, 41);
    lfreiwilliggezahlterBetrag1.setText("freiwillig gezahlter Betrag:");
    lfreiwilliggezahlterBetrag1.setBackground(new Color(0xC0C0C0));
    cp.add(lfreiwilliggezahlterBetrag1);
    nf_anzahl.setBounds(120, 160, 41, 33);
    cp.add(nf_anzahl);
    nf_betrag.setBounds(400, 160, 129, 41);
    cp.add(nf_betrag);
    bAbschicken1.setBounds(216, 216, 153, 33);
    bAbschicken1.setText("Abschicken");
    bAbschicken1.setMargin(new Insets(2, 2, 2, 2));
    bAbschicken1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        bAbschicken1_ActionPerformed(evt);
      }
    });
    bAbschicken1.setBackground(Color.GREEN);
    cp.add(bAbschicken1);
    tf_kreation.setBounds(208, 160, 161, 33);
    cp.add(tf_kreation);
    lKreation1.setBounds(208, 112, 161, 33);
    lKreation1.setText("Kreation");
    lKreation1.setHorizontalAlignment(SwingConstants.CENTER);
    lKreation1.setBackground(new Color(0xC0C0C0));
    cp.add(lKreation1);
    jl_tische.setModel(jl_tischeModel);
    jl_tischeScrollPane.setBounds(72, 224, 64, 88);
    jl_tischeModel.addElement("Tisch 1");
    jl_tischeModel.addElement("Tisch 2");
    jl_tischeModel.addElement("Tisch 3");
    jl_tischeModel.addElement("Tisch 4");
    cp.add(jl_tischeScrollPane);
    // Ende Komponenten
    
    setVisible(true);
  } // end of public MensaEingabeGUI
 
  // Anfang Methoden
 
  public static void main(String[] args) {
    new MensaEingabeGUI();
  } // end of main
 
  public void bAbschicken1_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
     tisch[kundenzahl] = nf_tisch.getInt();
     anzahl[kundenzahl] = nf_anzahl.getInt();
     betrag[kundenzahl] = nf_betrag.getDouble();
     kreation[kundenzahl] = tf_kreation.getText();
    
     nf_tisch.setText("");
     nf_anzahl.setText("");
     nf_betrag.setText("");
     tf_kreation.setText("");
    
     kundenzahl = kundenzahl + 1;
    
    System.out.println("Tischnummer:" + java.util.Arrays.toString(tisch));
    System.out.println("Anzahl der Essen:" + java.util.Arrays.toString(anzahl));
    System.out.println("freiwilliger Betrag" + java.util.Arrays.toString(betrag));
    System.out.println("Kreation:" + java.util.Arrays.toString(kreation));
  } // end of bAbschicken1_ActionPerformed

  // Ende Methoden
} // end of class MensaEingabeGUI
 

Zurück
Oben