"We are back" « oc.at

Unbezahlte Arbeit: Mini-Programm in Java

daisho 25.04.2010 - 10:32 2224 10 Thread rating
Posts

daisho

Vereinsmitglied
SHODAN
Avatar
Registered: Nov 2002
Location: 4C4
Posts: 19777
Es ist eigentlich nicht mein Stil so etwas anzufragen da ich das lieber selbst nachschaue, aber ich habe jetzt schon ein paar Stunden verschi..en nur um eine minimale GUI hinzubringen. Ich seh mich bei objektorientierter Programmierung nur wenig raus (und die letzten Versuche sind einige Zeit her) und Java scheint da einige verschiedene Möglichkeiten zu geben wie man das löst!?

Ich bräuchte eigentlich nur ein kleines Programm (nicht Applet), das mir (am besten vertikal sortiert) ein paar Dropdown-Boxen (JComboBox) und CheckBoxen (mit Text daneben) auf einem kleinen Frame ausgibt. Die Auswahlen (sowohl ComboBox und CheckBox) sollten dann bestimmten Zahlen zugeordnet sein (int) welche am Ende zu einem Ergebnis zusammengerechnet werden (das natürlich angezeigt werden soll :p).
Das ganze vertikal geordnet und mittig.

Also ganz blöd ausgedrückt:

JComboBox1:
Katze (entspricht der Zahl 1)
Hund (entspricht der Zahl 2)
Papagei (entspricht der Zahl 3)
etc.

JComboBox2:
Quadrat (entspricht der Zahl 7)
Kreis (entspricht der Zahl 8)
Dreieck (entspricht der Zahl 9)

CheckBox1: (entspricht der Zahl 11)
[ ] Schoko
CHeckBox2: (entspricht der Zahl 12)
[ ] Erdbeer

Ergebnis: (entspricht Zahl_aus_ComboBox1 + Zahl_aus_ComboBox2 - Zahl_aus_CheckBox1 + Zahl_aus_CheckBox2)
Als Beispiel



Die ganzen genaueren Details, Werte, wie viele Boxen, Rechnung etc. kann ich eh selbst schreiben, mir fehlt nur irgendwie eine Art Grundgerüst und werde aus den ganzen Beispielen nur bedingt schlau (bzw. kostet mich das einfach zuviel Zeit :(), ein passionierter Java-Coder hat das vermutlich in 1 min. :o

Gegi

Here to stay
Registered: Jan 2001
Location: Wien
Posts: 792
Schau dir das mal an:
http://java.sun.com/docs/books/tuto...layout/box.html
Sollte für deine Zwecke ausreichend sein und dürfte eigentlich auch nicht allzu kompliziert sein. :-)

Denne

Here to stay
Avatar
Registered: Jan 2005
Location: Germany
Posts: 2801
bin zwar kein java-profi, aber ich glaube, ich würde es so machen.

- Frame mit einem Gridlayout, welches 4 Zeilen und eine Spalte hat
- in Zeile 1 die ComboBox 1, in Zeile 2 die ComboBox 2, in Zeile 3 die beiden Chechboxen und in der 4ten Zeile ein JText mit dem Ergebnis der Zahlen
- zu den ersten 3 Zeilen jeweils actionlistener hinzufügen, die die Zahlen einfach auf einen int-wert aufaddieren.
- das ergebnis wird dann von dem JText benutzt

afaik sollte es so klappen :)

Bin leider nicht sooo fit mit GUI's, aber wenns kein anderer geschwind machen kann/will, werde ich mich dran versuchen.

Burschi1620

24/7 Santa Claus
Avatar
Registered: Apr 2004
Location: Drüber da Donau
Posts: 6792
Netbeans hat iirc einen GUI Builder dabei. Damit sollte das relativ fix gehen und man muss sich fast nicht um Sachen wie Layout oder so kümmern.

Denne

Here to stay
Avatar
Registered: Jan 2005
Location: Germany
Posts: 2801
Ich probiers grad mal, gib mir 1-2 Stunden :)

daisho

Vereinsmitglied
SHODAN
Avatar
Registered: Nov 2002
Location: 4C4
Posts: 19777
Das mit Netbeans muss ich mir mal anschauen, im Moment verwende ich Eclipse.
Aber jetzt gehts mal ab zur Grillfeier (da komm ich eher nicht dazu ;)).

@Denne: Nicht dass du dir da 1-2h Arbeit antust, dachte eher daran falls das in 1-2 Minuten erledigt wäre dann könnte es jemand schnell hinbiegen (ansonsten muss ich mich eh selbst drum kümmern) :)

Denne

Here to stay
Avatar
Registered: Jan 2005
Location: Germany
Posts: 2801
Müsste eh bissl üben für die Uni, von daher kommts vllt ganz gut :)

btw:
hab ich es richtig verstanden, bei den ersten 2 JComboBoxen kann man alles auswählen und bei der letzten Checkbox nur eins von den beiden?

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11340
Zitat von Denne
und bei der letzten Checkbox nur eins von den beiden?

Checkboxen sind üblicherweise unabhängig voneinander, sonst wären es Radiobuttons.

Denne

Here to stay
Avatar
Registered: Jan 2005
Location: Germany
Posts: 2801
Ja, das war sozusagen meine Frage, ob er nicht Radiobuttons meint.
Also kann man generell alles auswählen? (damit ich es richtig verstehe :D )

edit: okay, stand aufm schlauch, habs nun geschnallt :bash:

edit2:

Hab nun mal die GUI ohne Actionlistener gebastelt. Man müsste diese also nur noch hinzufügen, was nicht all zu schwer sein sollte.

Bild:

click to enlarge

ist es so, wie du es dir vorstellst?
Wenns so passt, kann ich die actionlistener hinzufügen und dir dann den quellcode schicken, oder aber du willst die actionlistener hinzufügen :) (mir egal).
Quellcode ist auch sehr simpel gehalten, eh nur eine kleine Klasse.
Sag dann grad Bescheid.


edit3:

So, Programm ist fertig.

Zwar nicht der schönste Quelltext, aber ich hoffe, du findest dich zurecht, ist nicht so schwer :)
Wenn was net stimmen sollte oder du was nicht verstehst, ich werde hier noch mitlesen.

Code:
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JComboBox;
import javax.swing.JSeparator;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;



public class ComboBox extends JFrame implements ActionListener{
	
	// Fenstergröße
	private static final int height = 350;
	private static final int width = 210;
	// Beide CheckBox-Optionen
	private JCheckBox schoko, erdbeer;
	// Text
	private JLabel text;
	// ComboBoxen
	private JComboBox eins, zwei;
	// Int Endergebniswert
	private int ergebnis = 0;
	// Int Zwischenwerte
	private int comboeins = 0;
	private int combozwei = 0;
	private int checkeins = 0;
	private int checkzwei = 0;
	
	
	public void actionPerformed(ActionEvent e){
		// leer
	}
	
	// Fenster
	ComboBox(){
		// Frame wird mit Namen erzeugt
		super("Auswahmenü");
		setSize(width, height);
		// neues Layout wird erstellt
		Container pane = getContentPane();
		pane.setLayout(new GridLayout(12,1));
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		// erste ComboBox
		pane.add(new JLabel("ComboBox Eins"));
		String[] tiere = {"Katze", "Hund", "Papagei", "bitte auswählen"};
		JComboBox eins = new JComboBox(tiere);
		eins.setSelectedIndex(3);
		pane.add(eins);
		// Actionevent
		eins.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				JComboBox auswahleins = (JComboBox)e.getSource();
				if(auswahleins.getSelectedItem().equals("Katze")) {
					comboeins = 1;
					summe();
					text.setText(("Ergebnis: " + ergebnis));
				} else if(auswahleins.getSelectedItem().equals("Hund")) {
					comboeins = 2;
					summe();
					text.setText(("Ergebnis: " + ergebnis));
				} else if(auswahleins.getSelectedItem().equals("Papagei")) {
					comboeins = 3;
					summe();
					text.setText(("Ergebnis: " + ergebnis));
				} else {
					comboeins = 0;
					summe();
					text.setText(("Ergebnis: " + ergebnis));
				}
			}
		});
		// Trennlinie
		JSeparator separatoreins = new JSeparator();
		pane.add(separatoreins);
		
		// zweite ComboBox
		pane.add(new JLabel("ComboBox Zwei: Bitte auswählen"));
		String[] formen = {"Quadrat", "Kreis", "Dreieck", "bitte auswählen"};
		JComboBox zwei = new JComboBox(formen);
		zwei.setSelectedIndex(3);
		pane.add(zwei);
		// Actionevent
		zwei.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				JComboBox auswahlzwei = (JComboBox)e.getSource();
				if(auswahlzwei.getSelectedItem().equals("Quadrat")) {
					combozwei = 7;
					summe();
					text.setText(("Ergebnis: " + ergebnis));
				} else if(auswahlzwei.getSelectedItem().equals("Kreis")) {
					combozwei = 8;
					summe();
					text.setText(("Ergebnis: " + ergebnis));
				} else if(auswahlzwei.getSelectedItem().equals("Dreieck")) {
					combozwei = 9;
					summe();
					text.setText(("Ergebnis: " + ergebnis));
				} else {
					combozwei = 0;
					summe();
					text.setText(("Ergebnis: " + ergebnis));
				}
			}
		});
		
		// Trennlinie
		JSeparator separatorzwei = new JSeparator();
		pane.add(separatorzwei);
		
		// CheckBox Schoko
		pane.add(new JLabel("CheckBox: Bitte auswählen"));
		schoko = new JCheckBox ("Schoko");
		//Actionevent
		ItemListener schokoevent = new ItemListener() {
			public void itemStateChanged (ItemEvent e) {
				JCheckBox schoko = (JCheckBox)e.getItemSelectable();
				if (schoko.isSelected()) {
					checkeins = 11;
					summe();
					text.setText(("Ergebnis: " + ergebnis));
				} else {
					checkeins = 0;
					summe();
					text.setText(("Ergebnis: " + ergebnis));
				}
			}
		};
		schoko.addItemListener(schokoevent);
		pane.add(schoko);
		
		//Checkbox Erdbeer
		erdbeer = new JCheckBox ("Erdbeer");
		// Actionevent
		ItemListener erdbeerevent = new ItemListener() {
			public void itemStateChanged (ItemEvent e) {
				JCheckBox erdbeer = (JCheckBox)e.getItemSelectable();
				if (erdbeer.isSelected()) {
					checkzwei = 12;
					summe();
					text.setText(("Ergebnis: " + ergebnis));
				} else {
					checkzwei = 0;
					summe();
					text.setText(("Ergebnis: " + ergebnis));
				}
			}
		};
		erdbeer.addItemListener(erdbeerevent);
		pane.add(erdbeer);
		
		//Trennlinie
		JSeparator separatordrei = new JSeparator();
		pane.add(separatordrei);
		
		// Text (welches das Ergebnis enthält
		text = new JLabel("Ergebnis: " + ergebnis);
		pane.add(text);
		
	}
	
	// Methode, die aus allen ausgewählten Objekten die Summe erzeugt
	public void summe () {
		ergebnis = comboeins + combozwei + checkeins + checkzwei;
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new ComboBox().setVisible(true);

	}

}

Gruß Denne
Bearbeitet von Denne am 25.04.2010, 18:47

daisho

Vereinsmitglied
SHODAN
Avatar
Registered: Nov 2002
Location: 4C4
Posts: 19777
Danke, sieht schonmal recht gut aus, da ist alles dabei was ich brauche. Um den Rest und Formatierung kümmere ich mich eh selbst :)

Denne

Here to stay
Avatar
Registered: Jan 2005
Location: Germany
Posts: 2801
viel Spaß damit :)
Falls noch was sein sollte -> Pm
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz