Lipwigzer
2008-03-18, 10:02:27
Grüßt euch,
hab' mich hier gerade angemeldet, daher erstmal 'nen freundliches 'Hallo' an alle (Mit-)Leser. :)
Folgendes Problem...
Hab' mich in den letzten Wochen Studiumbedingt in Java OOP eingearbeitet und will nun nach der Klausur nicht alles wieder verwerfen - also wird weitergeproggt.
Nun hab' ich hier aber "kleine" Unregelmäßigkeiten mit Swing.
Und zwar läuft mein Programm beim ersten Start (aus der Konsole) wunderbar - Swing stellt die GUI so dar, wie ichs möchte und alles läuft.
Wenn ich dann das Fenster schließe beendet es sich auch (auch inder Konsole zu sehen). Wenn ich es dann aber gleich wieder starte, bekomme ich nur ein graues leeres Fenester von Swing gezeichnet.
Wenn ichs allerdings beende und Strg+C in der Konsole drücke, klappt es beim nächsten Start wieder ohne Probleme. Es scheint also, als würde irgendeine Instanz nicht korrekt beendet werden und verhindert dann beim zweiten Start das Zeichnen der GUI durch Swing?!
Hier mein Code...
import javax.swing.*; // Java Package Swing GUI importieren
import java.awt.event.*; // Java Package Action Listener importieren
import java.awt.*;
public class myNewBox {
JFrame frame;
JLabel charLabel;
JLabel weaponLabel;
JPanel panel;
public static void main(String[] args) {
myNewBox theBox = new myNewBox();
theBox.makeGUI();
theBox.fillMyBag();
}
public void fillMyBag() { ... }
public String printChars() {
StringBuffer myString = new StringBuffer();
for(int i=0;i<myCharacter.theCharacters.size();i++) {
myString.append(myCharacter.theCharacters.get(i).toString()+"<p/>");
}
return myString.toString();
}
public String printWeapons() {
StringBuffer myString = new StringBuffer();
for(int i=0;i<weapon.theWeapons.size();i++) {
myString.append(weapon.theWeapons.get(i).toString()+"<p/>");
}
return myString.toString();
}
public void makeGUI() {
frame = new JFrame(); // Frame (Fenster) erstellen
charLabel = new JLabel("Das Label 1!"); // erstes Label erstellen
weaponLabel = new JLabel("Das Label 2!"); // zweietes Label erstellen
JButton charButton = new JButton("CHARACTER!"); // ersten Button erstellen
JButton weaponButton = new JButton("WEAPON!"); // zweiten Button erstellen
panel = new JPanel(); // Panel erstellen
// Panel einrichten...
panel.setBackground(Color.white);
panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
// Frame einrichten...
frame.setSize(600,600);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Buttons mit ActionListener versehen...
charButton.addActionListener(new characterListener());
weaponButton.addActionListener(new weaponListener());
// Elemente mit dem Frame verknüpfen...
frame.add(BorderLayout.CENTER, panel);
// Elemente mit dem Panel verknüpfen...
panel.add(charButton);
panel.add(charLabel);
panel.add(weaponButton);
panel.add(weaponLabel);
}
// Innere Klasse mit ActionListener für Button "charButton"
class characterListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
charLabel.setText("<html><p/>"+printChars()+"<p/></html>"); // NOCH IMPLEMENTIEREN !!!!
}
}
// Innere Klasse mit ActionListener für Button "weaponButton"
class weaponListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
weaponLabel.setText("<html><p/>"+printWeapons()+"<p/></html>"); // NOCH IMPLEMENTIEREN !!!!
}
}
}
Ich dachte, dass ich mit frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); alles nötige gemacht hätte... dem scheint aber irgendwie nicht so zu sein?!
In fillMyBag() werden Instanzen zwei anderer Klasse erzeugt (myCharacter und weapon) und diese in zwei generische, statische Arrays geladen. Den Teil hab ich mal weggelassen, da das ja nichts mit Swing zutun hat...
Hoffe, dass mir einer helfen kann! :)
EDIT: (falls es hilft) hier zwei Bilder...
Beim ersten Starten - alles 1A.
http://www5.picfront.org/picture/CCsp2Vjbfx3/img/javaSwing1.jpg
Beim zweiten Starten - nur noch graue Fläche. (behebbar, wenn ich nach dem ersten Beenden in der Konsole Strg+C drücke)
http://www5.picfront.org/picture/RFtihsra/img/javaSwing2.jpg
Beste Grüße und Danke schon jetzt.
Lipwigzer
hab' mich hier gerade angemeldet, daher erstmal 'nen freundliches 'Hallo' an alle (Mit-)Leser. :)
Folgendes Problem...
Hab' mich in den letzten Wochen Studiumbedingt in Java OOP eingearbeitet und will nun nach der Klausur nicht alles wieder verwerfen - also wird weitergeproggt.
Nun hab' ich hier aber "kleine" Unregelmäßigkeiten mit Swing.
Und zwar läuft mein Programm beim ersten Start (aus der Konsole) wunderbar - Swing stellt die GUI so dar, wie ichs möchte und alles läuft.
Wenn ich dann das Fenster schließe beendet es sich auch (auch inder Konsole zu sehen). Wenn ich es dann aber gleich wieder starte, bekomme ich nur ein graues leeres Fenester von Swing gezeichnet.
Wenn ichs allerdings beende und Strg+C in der Konsole drücke, klappt es beim nächsten Start wieder ohne Probleme. Es scheint also, als würde irgendeine Instanz nicht korrekt beendet werden und verhindert dann beim zweiten Start das Zeichnen der GUI durch Swing?!
Hier mein Code...
import javax.swing.*; // Java Package Swing GUI importieren
import java.awt.event.*; // Java Package Action Listener importieren
import java.awt.*;
public class myNewBox {
JFrame frame;
JLabel charLabel;
JLabel weaponLabel;
JPanel panel;
public static void main(String[] args) {
myNewBox theBox = new myNewBox();
theBox.makeGUI();
theBox.fillMyBag();
}
public void fillMyBag() { ... }
public String printChars() {
StringBuffer myString = new StringBuffer();
for(int i=0;i<myCharacter.theCharacters.size();i++) {
myString.append(myCharacter.theCharacters.get(i).toString()+"<p/>");
}
return myString.toString();
}
public String printWeapons() {
StringBuffer myString = new StringBuffer();
for(int i=0;i<weapon.theWeapons.size();i++) {
myString.append(weapon.theWeapons.get(i).toString()+"<p/>");
}
return myString.toString();
}
public void makeGUI() {
frame = new JFrame(); // Frame (Fenster) erstellen
charLabel = new JLabel("Das Label 1!"); // erstes Label erstellen
weaponLabel = new JLabel("Das Label 2!"); // zweietes Label erstellen
JButton charButton = new JButton("CHARACTER!"); // ersten Button erstellen
JButton weaponButton = new JButton("WEAPON!"); // zweiten Button erstellen
panel = new JPanel(); // Panel erstellen
// Panel einrichten...
panel.setBackground(Color.white);
panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
// Frame einrichten...
frame.setSize(600,600);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Buttons mit ActionListener versehen...
charButton.addActionListener(new characterListener());
weaponButton.addActionListener(new weaponListener());
// Elemente mit dem Frame verknüpfen...
frame.add(BorderLayout.CENTER, panel);
// Elemente mit dem Panel verknüpfen...
panel.add(charButton);
panel.add(charLabel);
panel.add(weaponButton);
panel.add(weaponLabel);
}
// Innere Klasse mit ActionListener für Button "charButton"
class characterListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
charLabel.setText("<html><p/>"+printChars()+"<p/></html>"); // NOCH IMPLEMENTIEREN !!!!
}
}
// Innere Klasse mit ActionListener für Button "weaponButton"
class weaponListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
weaponLabel.setText("<html><p/>"+printWeapons()+"<p/></html>"); // NOCH IMPLEMENTIEREN !!!!
}
}
}
Ich dachte, dass ich mit frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); alles nötige gemacht hätte... dem scheint aber irgendwie nicht so zu sein?!
In fillMyBag() werden Instanzen zwei anderer Klasse erzeugt (myCharacter und weapon) und diese in zwei generische, statische Arrays geladen. Den Teil hab ich mal weggelassen, da das ja nichts mit Swing zutun hat...
Hoffe, dass mir einer helfen kann! :)
EDIT: (falls es hilft) hier zwei Bilder...
Beim ersten Starten - alles 1A.
http://www5.picfront.org/picture/CCsp2Vjbfx3/img/javaSwing1.jpg
Beim zweiten Starten - nur noch graue Fläche. (behebbar, wenn ich nach dem ersten Beenden in der Konsole Strg+C drücke)
http://www5.picfront.org/picture/RFtihsra/img/javaSwing2.jpg
Beste Grüße und Danke schon jetzt.
Lipwigzer