title image


Smiley GUI Zugriff auf Komponenten eines JPanels
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, ohne dass jede Komponente einzeln angelegt werden muss?



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

{

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;



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;

}

}







/* 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();

}

});

}



}

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: