Hallo liebe Java-Gemeinde.
Ich habe letztes Weihnachten damit begonnen immer wieder mal ein bisschen mehr Java zu lernen und bin nun beim Gui programmieren angelangt und habe es geschafft, ein halbwegs funktionierendes Programm zu schreiben.
Dann habe ich etwas verändert und nun funktioniert es nicht mehr so wie es soll.
Was soll das Programm tun: ich habe 2 JCheckboxes, bei der ich eine auswahl treffe, darunter ein JTextfield, in dem ich eine Zahl eingebe und diese zahl mit parseInt in eine int variable schreibe. anhand dieses int variablen-inhalts und der JCheckbox-auswahl soll er mir dann eine ausgabe ins JLabel ausgeben.
es tut sich allerdings nach eingabe und anhaken der checkbox und anschließendem button-druck nichts.
Ich persönlich vermute den Fehler in der Klasse "Level", finde ihn jedoch nicht.
Weiters: beim ausführen des programms in Eclipse erscheinen meine Checkboxes und Buttons und JTextFields erst bei Mouseover ! bug?
danke schonmal für eure Zeit. Und über Feedback über sauberes Programmieren wäre ich dankbar.
lg
hier mal den quellcode meiner 3 Klassen:
Ich habe letztes Weihnachten damit begonnen immer wieder mal ein bisschen mehr Java zu lernen und bin nun beim Gui programmieren angelangt und habe es geschafft, ein halbwegs funktionierendes Programm zu schreiben.
Dann habe ich etwas verändert und nun funktioniert es nicht mehr so wie es soll.
Was soll das Programm tun: ich habe 2 JCheckboxes, bei der ich eine auswahl treffe, darunter ein JTextfield, in dem ich eine Zahl eingebe und diese zahl mit parseInt in eine int variable schreibe. anhand dieses int variablen-inhalts und der JCheckbox-auswahl soll er mir dann eine ausgabe ins JLabel ausgeben.
es tut sich allerdings nach eingabe und anhaken der checkbox und anschließendem button-druck nichts.
Ich persönlich vermute den Fehler in der Klasse "Level", finde ihn jedoch nicht.
Weiters: beim ausführen des programms in Eclipse erscheinen meine Checkboxes und Buttons und JTextFields erst bei Mouseover ! bug?
danke schonmal für eure Zeit. Und über Feedback über sauberes Programmieren wäre ich dankbar.
lg
hier mal den quellcode meiner 3 Klassen:
Java:
import javax.swing.JFrame;
public class LevelTest {
public static void main(String[] args) {
@SuppressWarnings("unused")
JFrame aFrame = new UnserFrame(); // UnserFrame() Konstruktor aufrufen
}
}
Java:
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class UnserFrame extends JFrame { // ich spare mir hierdurch das ständige Eintippen vom JFrame Objekt.
JLabel fraktion; // Labels, TextFields, Buttons und Checkboxes-Objektnamen reservieren.
JLabel level;
JTextField textFraktion;
JTextField textLevel;
JLabel recommendation;
JButton aButton;
JButton resetButton;
JCheckBox checkHorde;
JCheckBox checkAlliance;
public UnserFrame(){ // Konstruktor für den zu erstellenden Frame
setVisible(true); // sichtbar machen
setSize(600, 400); // Fenstergröße
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // schließbar machen
setLocationRelativeTo(null); // in der Bildschirm-Mitte positionieren
setTitle("Levelgebiet Vorschlag"); // Fenstertitel angeben
setResizable(true); // Fenstergröße veränderbar
setLayout(null); //
fraktion = new JLabel("Fraktion:"); //zeigt nur "Fraktion:" an
Font schrift = (fraktion.getFont().deriveFont(Font.PLAIN, 12));
fraktion.setBounds(10, 10, 63, 20);
fraktion.setFont(schrift);
add(fraktion);
//textFraktion = new JTextField();
//textFraktion.setBounds(80, 10, 63, 20);
//add(textFraktion);
level = new JLabel("Level:"); //zeigt nur "Level:" an
level.setBounds(10, 70, 63, 20);
level.setFont(schrift);
add(level);
textLevel = new JTextField(); //zur Eingabe der Zahl für das Level
textLevel.setBounds(80, 70, 63, 20);
add(textLevel);
recommendation = new JLabel(""); // hier wird die ausgabe erfolgen
recommendation.setBounds(10, 100, 300, 20);
recommendation.setFont(schrift);
add(recommendation);
aButton = new JButton("Recommend"); // der knopf bewirkt die ausgabe ins recommendation JLabel
aButton.setBounds(10, 130, 110, 20);
aButton.addActionListener(new RecListener());
add(aButton);
resetButton = new JButton("reset"); // der knopf soll das level und die fraktion auf 0 oder "" setzen.
resetButton.setBounds(10, 160, 110, 20);
resetButton.addActionListener(new ResetListener());
add(resetButton);
checkHorde = new JCheckBox("Horde"); // 2 checkboxes für fraktionsauswahl
checkHorde.setBounds(80, 10, 63, 20); //
checkHorde.addItemListener(new HordeListener()); // entsprechenden Listener adden
add(checkHorde); // und Checkbox hinzufügen
checkAlliance = new JCheckBox("Alliance"); // nicht optimal, da beide gleichzeitig anklickbar sind
checkAlliance.setBounds(80, 40, 93, 20);
checkAlliance.addItemListener(new AllianceListener()); // entsprechenden Listener adden
add(checkAlliance); // und checkbox hinzufügen
}
private class ResetListener implements ActionListener{ // der Listener für den Reset button
Level alevel = new Level(); // Level Objekt erstelle für Zugriff auf Level Klasse.
@Override
public void actionPerformed(ActionEvent e) { // auf knopfdruck soll auf die Methoden der Level Klasse zugegriffen werden
// TODO Auto-generated method stub
alevel.setFraction(""); // die fraktion soll auf "" gesetzt werden.
alevel.setLevel(0); // das level soll auf 0 gesetzt werden.
}
}
private class RecListener implements ActionListener{ // Listener für das recommendation JLabel
Level aLevel = new Level(); // Level-Objekt erstellen für zugriff auf Level Klasse
int i; // i als speicherort der geparseten eingabe
String j; // string als speicherort der Texteingabe.
public void actionPerformed(ActionEvent e) { // auf knopfdruck wird die eingabe verarbeitet
j = textLevel.getText();
try { //eingabe in Integer umwandeln
i = Integer.parseInt(j);
aLevel.setLevel(i); //und anhand der eingabe das level setzen
//System.out.println(i); // für debug - level wird tatsächlich übernommen.
} catch (NumberFormatException ex){
System.out.println("not a number"); //falls keine zahl eingegeben wird fehlermeldung ausgeben
}recommendation.setText(aLevel.getRecommend()); //recommend methode aufrufen und die recommendation ins JLabel reinschreiben
}
}
private class AllianceListener implements ItemListener{ // Listener für Alliance JCheckbox
Level h = new Level(); // Level Objekt für Zugriff auf Level Klasse
public void itemStateChanged(ItemEvent e) { // wenn angehakt:
if(checkAlliance.isSelected()){ // setFraction() methode aufrufen und
h.setFraction("alliance"); // fraction-String in Klasse Level auf "alliance" stellen
}
}
}
private class HordeListener implements ItemListener{ // Listener für Horde JCheckbox
Level h = new Level(); // Level Objekt für Zugriff auf Level Klasse
public void itemStateChanged(ItemEvent e) { // wenn angehakt:
if(checkHorde.isSelected()){ // setFraction() methode aufrufen und
h.setFraction("horde"); // fraction-String in der Level Klasse auf "horde" stellen
}
}
}
}
Java:
public class Level {
int level = 0;
String fraction = "";
String aZone[] = {"Westfall","Redridge Mountains","Redridge Mountains",
"Stranglethorn Vale","Western Plaguelands",
"Eastern Plaguelands","Tanaris","Un'Goro Crater",
"Winterspring","Silithus","Blasted Lands",
"your starting area"};
String hZone[] = {"Northern Barrens","Ashenvale"};
public void setLevel(int level) {
this.level = level;
}
public void setFraction(String fraction) {
this.fraction = fraction;
}
public String getRecommend() {
String returnString ="";
if ((fraction.equals("horde") && ((level <= 10)))) {
returnString = aZone[11];
} else if ((fraction.equals("horde") && (level >= 10 && level <= 20))) {
returnString = hZone[0];
} else if((fraction.equals("horde") && (level >= 20 && level <= 25))) {
returnString = hZone[1];
} else if((fraction.equals("horde") && (level >= 25 && level <= 35))) {
returnString = aZone[3];
} else if((fraction.equals("horde") && (level >= 35 && level <= 40))) {
returnString = aZone[4];
} else if((fraction.equals("horde") && (level >= 40 && level <= 45))) {
returnString = aZone[5];
} else if((fraction.equals("horde") && (level >= 45 && level <= 50))) {
returnString = aZone[6];
} else if((fraction.equals("horde") && (level >= 50 && level <= 55))) {
returnString = aZone[7];
} else if((fraction.equals("horde") && (level >= 55 && level <= 60))) {
returnString = "Silithus at lvl 55 or Blasted Lands at lvl 54";
} else if ((fraction.equals("alliance")) && (level >= 10 && level <= 15)) {
returnString = aZone[11];
} else if ((fraction.equals("alliance")) && (level >= 15 && level <= 20)) {
returnString = aZone[2];
} else if ((fraction.equals("alliance")) && (level >= 25 && level <= 35)) {
returnString = aZone[3];
} else if ((fraction.equals("alliance")) && (level >= 35 && level <= 40)) {
returnString = aZone[4];
} else if ((fraction.equals("alliance")) && (level >= 40 && level <= 45)) {
returnString = aZone[5];
} else if ((fraction.equals("alliance")) && (level >= 45 && level <= 50)) {
returnString = aZone[6];
} else if ((fraction.equals("alliance")) && (level >= 50 && level <= 55)) {
returnString = aZone[7];
} else if ((fraction.equals("alliance")) && (level >= 55 && level <= 60)) {
returnString = "Silithus at lvl 55 or in Blasted Lands at lvl 54";
} else if ((fraction.equals("alliance")) && (level < 10)) {
returnString = aZone[10];
} else System.out.println("wrong input");
return returnString;
}
}