Announcement

Collapse
No announcement yet.

GUI Zugriff auf Komponenten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • GUI Zugriff auf Komponenten

    Hallo zusammen,

    ich hab zum Austesten der GUI-Programmierung ein kleines "6 aus 49"-Auswertungsprogramm geschrieben. Es funktioniert auch, aber ich finde den Code zu umständlich. Momentan leg ich zum Auslesen der Zahlen für jedes Feld ein extra Textfeld an. Genauso zum Ausgeben der Ergebnisse.

    Jetzt meine Frage: Gibt es eine Möglichkeit, auf die Komponenten eines Panels nacheinander zuzugreifen und die einzelnen Attribute auszulesen bzw. zu ändern?

    Also beispielsweise, Zugriff auf Panel -> Zugriff auf erste Komponente(JTextField) -> Zugriff mit getText oder ähnlichem.

    Ich häng mal den Code an, dann wird sofort klar, dass die Initialiserung ziemlich umständlich abläuft. Wahrscheinlich werden auch andere Sachen nicht so toll programmiert sein, ist ja alles zum Austesten. Wäre nett, wenn Ihr mir einige Optimierungsmöglichkeiten nennen könntet.

    Danke und Grüße

    Oli

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;

    public class Lotto extends JFrame implements ActionListener {

    private static final long serialVersionUID = 1L;

    String[] kasten1 = { "17", "18", "33", "37", "39", "48" };
    String[] kasten2 = { "2", "10", "12", "22", "23", "28" };
    String[] kasten3 = { "10", "14", "27", "34", "35", "44" };
    String[] kasten4 = { "19", "23", "32", "37", "44", "48" };
    String[] kasten5 = { "1", "16", "18", "30", "33", "38" };
    String[] kasten6 = { "10", "14", "18", "27", "30", "40" };
    String[] kasten7 = { "6", "7", "9", "12", "23", "27" };
    String[] kasten8 = { "9", "20", "29", "43", "45", "47" };
    String[] kasten9 = { "3", "27", "30", "33", "38", "46" };
    String[] kasten10 = { "1", "8", "20", "23", "32", "41" };
    String[] kasten11 = { "9", "13", "26", "32", "37", "42" };
    String[] kasten12 = { "3", "12", "16", "27", "36", "47" };

    String losnummer = "4392664";

    String[][] schein = { kasten1, kasten2, kasten3, kasten4, kasten5, kasten6,
    kasten7, kasten8, kasten9, kasten10, kasten11, kasten12 };

    JTextField feld1 = new JTextField(2);
    JTextField feld2 = new JTextField(2);
    JTextField feld3 = new JTextField(2);
    JTextField feld4 = new JTextField(2);
    JTextField feld5 = new JTextField(2);
    JTextField feld6 = new JTextField(2);
    JTextField feld7 = new JTextField(2);
    JTextField feld8 = new JTextField(2);

    JTextField[] gesamt = { feld1, feld2, feld3, feld4, feld5, feld6, feld7,
    feld8 };

    JLabel label1, label2, label3, label4, label5, label6, label7, label8,
    label9, label10, label11, label12;

    JLabel[] kasten = { label1, label2, label3, label4, label5, label6, label7,
    label8, label9, label10, label11, label12 };

    JPanel panel;

    JLabel test;

    public Lotto() {
    super("Die Lottoauswertung");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );

    /* Beschreibung des Layouts gesamtes Fenster */
    GridBagLayout layout = new GridBagLayout();
    GridBagConstraints gbc = new GridBagConstraints();
    setLayout(layout);

    JButton button;
    Insets inset = new Insets(0, 0, 0, 0);

    /* Einfügen Panel mit gesamtem Schein */
    JPanel zahlenreihen = new JPanel(new GridLayout(13, 6));
    for (int i = 0; i < 12; i++) {
    for (int y = 0; y < 6; y++) {
    zahlenreihen.add(new Label(schein[i][y]));
    }
    }
    gbc = makegbc(0, 0, 1, 3);
    gbc.fill = GridBagConstraints.BOTH;
    layout.setConstraints(zahlenreihen, gbc);
    add(zahlenreihen);

    /* Einfügen Panel für neue Ziehung */
    panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
    for (int i = 0; i < 6; i++) {
    panel.add(gesamt[i]);
    }
    panel.add(new JLabel(" ZZ"));
    panel.add(feld7);
    panel.add(new JLabel(" SZ"));
    panel.add(feld8);

    gbc = makegbc(1, 0, 1, 1);
    layout.setConstraints(panel, gbc);
    add(panel);

    /* Einfügen Button "Auswerten" */

    button = new JButton("Auswertung");
    button.addActionListener(this);
    gbc = makegbc(1, 1, 1, 1);
    inset.set(5, 0, 10, 0);
    gbc.insets = inset;
    layout.setConstraints(button, gbc);
    add(button);

    /* Einfügen Panel für Ergebnisse */
    panel = new JPanel();
    panel.setLayout(new GridLayout(12, 1));

    for (int i = 0; i < 12; i++) {
    panel.add(kasten[i] = new JLabel("Kästchen" + (i + 1) + ": "));
    }

    gbc = makegbc(1, 2, 1, 1);
    gbc.weightx = 1.0;
    gbc.fill = GridBagConstraints.BOTH;
    layout.setConstraints(panel, gbc);
    add(panel);

    pack();

    }

    /* Hilfe für das Layout */
    private GridBagConstraints makegbc(int x, int y, int width, int height) {
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridx = x;
    gbc.gridy = y;
    gbc.gridwidth = width;
    gbc.gridheight = height;
    gbc.insets = new Insets(1, 1, 1, 1);
    return gbc;
    }

    /* Durchführung der Auswertung */
    void Auswertung(String[] aktuell) {
    int richtig = 0;
    boolean zusatzzahl = false;

    /* Auswertung 6 aus 49 */
    for (int i = 0; i < 12; i++) {
    for (int j = 0; j < 6; j++) {
    for (int x = 0; x < 6; x++) {
    if (schein[i][j].equals(aktuell[x]))
    richtig++;
    }
    if (schein[i][j].equals(aktuell[6]))
    zusatzzahl = true;
    }

    if (zusatzzahl == false) {
    kasten[i].setText("Kästchen" + (i + 1) + ": "
    + Integer.toString(richtig));
    } else {
    kasten[i].setText("Kästchen" + (i + 1) + ": "
    + Integer.toString(richtig) + " + ZZ");
    }

    richtig = 0;
    zusatzzahl = false;

    }
    }

    /* Auswertung Spiel 77 und Super 6 (Kommt noch) */

    /* Abarbeitung der Events */
    public void actionPerformed(ActionEvent event) {
    String[] aktuell = { "", "", "", "", "", "", "", "" };
    for (int i = 0; i < 8; i++) {
    {
    aktuell[i] = gesamt[i].getText();
    }
    Auswertung(aktuell);
    }
    }

    private static void initGUI() {
    JFrame.setDefaultLookAndFeelDecorated(true);

    Lotto lotto = new Lotto();
    lotto.setVisible(true);
    }

    public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    initGUI();
    }
    });
    }

    }

  • #2
    Wow, der Code ist ja grausam... ;-) Aber macht ja nichts! Schau dir zu diesem Thema mal das Entwurfsmuster MVC (Model-View-Controller) an

    Comment

    Working...
    X