Hallo!
ich habe ein kleines aber feines Problemchen. Wenn ich diese Klasse ausführen möchte dann klappt es auch jedoch bloeibt der JFrame zunächst grau. man muss immer zuerst mit dem curser den rand anklicken bevor der inhalt des JFrames angezeigt wird, ich fürchte es hat was mit der methode pack() zu tun. villt kennt jemand von euch dieses problem und kann mir dabei helfen:
ich habe ein kleines aber feines Problemchen. Wenn ich diese Klasse ausführen möchte dann klappt es auch jedoch bloeibt der JFrame zunächst grau. man muss immer zuerst mit dem curser den rand anklicken bevor der inhalt des JFrames angezeigt wird, ich fürchte es hat was mit der methode pack() zu tun. villt kennt jemand von euch dieses problem und kann mir dabei helfen:
Java:
package gruppe03.mvc.gui;
import gruppe03.mvc.gui.*;
import gruppe03.mvc.model.Gegenstaende;
import gruppe03.mvc.model.GegenstaendeDAO;
import gruppe03.mvc.model.GegenstandInfo;
import gruppe03.mvc.gui.GegenstandHandler;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.Collection;
import java.util.Iterator;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.border.BevelBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
public class GegenstaendeFrame extends JFrame {
public Gegenstaende model;
private JMenuBar menuBar = new JMenuBar();
private JMenu menuDatei = new JMenu("Datei");
private JMenu menuHilfe = new JMenu("?");
private JMenuItem menuDateiOeffnen = new JMenuItem("Oeffnen");
private JMenuItem menuDateiSpeichern = new JMenuItem("Speichern");
private JMenuItem menuDateiBeenden = new JMenuItem("Beenden");
private JMenuItem menuHilfeWillkommen = new JMenuItem("Willkommen");
private JMenuItem menuHilfeKontakt = new JMenuItem("Kontakt");
private JMenuItem menuHilfeHilfe = new JMenuItem("Hilfe");
// Hier werden alle Label und die dazugehoerigen Textfields implementiert
private JTextField beschreibungField = new JTextField(10);
private JLabel beschreibungLabel = new JLabel("Beschreibung");
private JLabel kategorieLabel = new JLabel("Kategorie");
private JTextField kategorieField = new JTextField(10);
private JLabel raumLabel = new JLabel("Raum");
private JTextField raumField = new JTextField(10);
private JLabel wertLabel = new JLabel("Wert in Euro");
private JTextField wertField = new JTextField(10);
private JLabel gewichtLabel = new JLabel ("Gewicht in kg");
private JTextField gewichtField = new JTextField(10);
private JLabel volumenLabel = new JLabel("Volumen in cm³");
private JTextField volumenField = new JTextField(10);
private JLabel zerbrechlichLabel = new JLabel("Zerbrechlich");
private JTextField zerbrechlichField = new JTextField(10);
private JLabel anmerkungLabel = new JLabel ("Anmerkung");
private TextArea anmerkungArea = new TextArea("",5,1,TextArea.SCROLLBARS_NONE);
private JLabel gesamtLabel = new JLabel("Anzahl Gegenstaende");
private JTextField gesamtField = new JTextField (2);
private JLabel wertAllerLabel = new JLabel ("Gesamt Wert in Euro");
private JTextField wertAllerField = new JTextField(2);
private JLabel durchGewichtLabel = new JLabel ("Durchschnittliches Gewicht");
private JTextField durchGewichtField = new JTextField (2);
private JLabel suchLabel = new JLabel("Suchwort eingeben: ");
JTextField suchField = new JTextField (5);
private JButton suchButton = new JButton (" Suche starten");
private JButton wiederherstellen = new JButton("Suche beenden");
//Buttons Gegenstaende Verwalten
private JButton hinzufuegen = new JButton("Hinzufuegen");
private JButton bearbeiten = new JButton (" Bearbeiten ");
private JButton loeschen = new JButton (" Loeschen ");
private GUIListe guiListe = new GUIListe();
// Hauptfenster
private JFrame hauptFenster = new JFrame ("Hausratsverwaltung");
// JFileChooser zum Öffnen und Speichern
private JFileChooser fc = new JFileChooser();
public void GegenstaendeFrameMenu()
{
//Menu Datei
menuBar.add(menuDatei);
menuBar.add(menuHilfe);
menuDatei.addSeparator();
menuDatei.add(menuDateiOeffnen);
menuDatei.addSeparator();
menuDatei.add(menuDateiSpeichern);
menuDatei.addSeparator();
menuHilfe.add(menuHilfeHilfe);
menuHilfe.addSeparator();
menuHilfe.add(menuHilfeWillkommen);
menuHilfe.addSeparator();
menuHilfe.add(menuHilfeKontakt);
}
public void gegenstandInfo()
{
Box gegenstand = Box.createVerticalBox();
gegenstand.add(beschreibungLabel);
gegenstand.add(beschreibungField);
beschreibungField.setEditable(false);
gegenstand.add(kategorieLabel);
gegenstand.add(kategorieField);
kategorieField.setEditable(false);
gegenstand.add(raumLabel);
gegenstand.add(raumField);
raumField.setEditable(false);
gegenstand.add(wertLabel);
gegenstand.add(wertField);
wertField.setEditable(false);
gegenstand.add(gewichtLabel);
gegenstand.add(gewichtField);
gewichtField.setEditable(false);
gegenstand.add(volumenLabel);
gegenstand.add(volumenField);
volumenField.setEditable(false);
gegenstand.add(zerbrechlichLabel);
gegenstand.add(zerbrechlichField);
zerbrechlichField.setEditable(false);
gegenstand.add(anmerkungLabel);
gegenstand.add(anmerkungArea);
anmerkungArea.setEditable(true);
JPanel panelGegenstand = new JPanel(new BorderLayout());
panelGegenstand.setBorder(new TitledBorder(
new EtchedBorder(),
"Gegenstandinfo"));
panelGegenstand.setLayout(new FlowLayout(FlowLayout.LEFT));
panelGegenstand.add(gegenstand, BorderLayout.CENTER);
//Box Gegenstandsliste
Box gegenstandsListe = Box.createVerticalBox();
gegenstandsListe.add(guiListe);
JPanel panelGegenstandsListe = new JPanel(new BorderLayout());
panelGegenstandsListe.setBorder(new TitledBorder(
new EtchedBorder(),
"Gegenstandsliste"));
panelGegenstandsListe.add(gegenstandsListe, BorderLayout.CENTER);
//Box Gegenstaende verwalten
Box gegenstaendeVerwalten = Box.createVerticalBox();
gegenstaendeVerwalten.add(bearbeiten);
gegenstaendeVerwalten.add(Box.createVerticalStrut(5));
gegenstaendeVerwalten.add(hinzufuegen);
hinzufuegen.setSize(10,10);
gegenstaendeVerwalten.add(Box.createVerticalStrut(5));
gegenstaendeVerwalten.add(loeschen);
JPanel panelVerwalten = new JPanel(new BorderLayout());
panelVerwalten.setBorder(new TitledBorder(
new EtchedBorder(),
"Gegenstaende verwalten"));
panelVerwalten.setLayout(new FlowLayout(FlowLayout.CENTER));
panelVerwalten.add(gegenstaendeVerwalten, BorderLayout.CENTER);
//Ubersicht Anzahlgegenstaende, Wert und durchschnittsgewicht aller Gegenstaende
Box uebersichtGegenstaende = Box.createVerticalBox();
uebersichtGegenstaende.add(gesamtLabel);
uebersichtGegenstaende.add(gesamtField);
uebersichtGegenstaende.add(wertAllerLabel);
uebersichtGegenstaende.add(wertAllerField);
uebersichtGegenstaende.add(durchGewichtLabel);
uebersichtGegenstaende.add(durchGewichtField);
JPanel panelUebersicht = new JPanel(new BorderLayout());
panelUebersicht.setBorder(new TitledBorder(
new EtchedBorder(),
"HausratInfo"));
panelUebersicht.setLayout(new FlowLayout(FlowLayout.LEFT));
panelUebersicht.add(uebersichtGegenstaende, BorderLayout.CENTER);
//Suchfunktion
Box suchGegenstand = Box.createVerticalBox();
suchGegenstand.add(suchLabel);
suchGegenstand.add(suchField);
suchGegenstand.add(Box.createVerticalStrut(5));
suchGegenstand.add(suchButton);
suchGegenstand.add(Box.createVerticalStrut(5));
suchGegenstand.add(wiederherstellen);
suchGegenstand.add(Box.createVerticalStrut(5));
JPanel panelSuche = new JPanel(new BorderLayout());
panelSuche.setBorder(new TitledBorder(
new EtchedBorder(),
"Gegenstand suchen"));
panelSuche.setLayout(new FlowLayout(FlowLayout.LEFT));
panelSuche.add(suchGegenstand, BorderLayout.CENTER);
Container inhalt = hauptFenster.getContentPane();
BoxLayout box = new BoxLayout(inhalt, BoxLayout.Y_AXIS);
Box top = Box.createHorizontalBox();
top.add(panelGegenstand);
top.add(panelGegenstandsListe);
top.add(panelVerwalten);
panelVerwalten.add(Box.createRigidArea(new Dimension(20, 0)));
Box down = Box.createHorizontalBox();
down.add(panelUebersicht);
down.add(panelSuche);
inhalt.setLayout(box);
inhalt.add(top);
inhalt.add(down);
}
/**
* Mit dieser Methode werden im Gruppenfenster "HausratInfo"
* Informationen über die Anzahl aller Gegenstaende,
* Gewicht, Wert in Echtzeit angezeigt.
**/
public void initFromModelHausratInfo () {
gesamtField.setText (""+model.getAnzahlGegenstaende());
wertAllerField.setText(""+model.valueGegenstaende());
durchGewichtField.setText(""+model.durchGewicht());
guiListe.setElements (model.getGegenstaende());
}
/**
* Mit dieser Methode werden Daten im Gruppenfenster "GegenstandInfo" sichtbar gemacht,
* wenn ein Gegenstand in der Gegenstandliste markiert wird.
**/
void initFromModelSelected(GegenstandInfo g){
beschreibungField.setText(g.getBeschreibung());
wertField.setText(""+g.getWert());
gewichtField.setText(""+g.getGewicht());
raumField.setText(""+g.getRaum());
kategorieField.setText(""+g.getKategorie());
volumenField.setText(""+g.getVolumen());
zerbrechlichField.setText(""+g.getZerbrechlich());
anmerkungArea.setText(g.getAnmerkung());
}
/**
* Mit dieser Mehthode können alle Daten aus dem Gruppenfenser "GegenstandInfo" gelöscht
* werden.
**/
void clearGegenstandInfo(){
beschreibungField.setText("");
wertField.setText("");
gewichtField.setText("");
raumField.setText("");
kategorieField.setText("");
volumenField.setText("");
zerbrechlichField.setText("");
anmerkungArea.setText("");
}
class GUIListe extends JList {
private DefaultListModel swingListModel = new DefaultListModel();
public void setElements (Collection gegenstandList) {
swingListModel.removeAllElements();
Iterator iter = gegenstandList.iterator();
while (iter.hasNext()) {
GegenstandInfo g = (GegenstandInfo)iter.next();
swingListModel.addElement (g.getDisplayString());
}
}
class ListClickHandler extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
// Doppelklick mit linker Taste auf Liste?
if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) {
// Ein vorhandener Gegenstand wird bearbeitet:
int index = getSelectedIndex();
if (index >= 0) {
GegenstandInfo g = model.getGegenstandInfo(index);
// Dialog für GegenstandInfo-Objekt oeffnen:
GegenstandInfoDialog dlg = new GegenstandInfoDialog(GegenstaendeFrame.this, g);
if (dlg.closedBestaetigen) {
initFromModelHausratInfo();
}
}
}
if(e.getClickCount() == 1 && e.getButton()==MouseEvent.BUTTON1){
// Ein vorhandener Gegenstand wird bearbeitet:
int index = getSelectedIndex();
if (index >= 0) {
GegenstandInfo g = model.getGegenstandInfo(index);
initFromModelSelected(g);
}
}
}
}
public void GUIListe () {
setModel (swingListModel);
addMouseListener (new ListClickHandler());
//Löschen eines Gegenstandes mit der Hilfe
// eines anonymem ActionListener
loeschen.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt) {
int index = guiListe.getSelectedIndex();
if (-1 == index) {
System.out.println("nichts markiert");//No item selected
return ;
}
model.deleteGegenstand(index);
swingListModel.remove(index);
clearGegenstandInfo();
initFromModelHausratInfo();
System.out.println(" removed at " + index);
}
});
bearbeiten.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt) {
int index = getSelectedIndex();
if (index >= 0) {
GegenstandInfo g = model.getGegenstandInfo(index);
// Dialog für GegenstandInfo-Objekt oeffnen:
GegenstandInfoDialog dlg = new GegenstandInfoDialog(GegenstaendeFrame.this, g);
if (dlg.closedBestaetigen) {
initFromModelHausratInfo();
}
}
}
});
}
}
/**
* Das Klicken auf Schaltflächen wird hier erfasst und an den GegenstandHandler
* übergeben, dort werden die Aktion ausgewertet und durchgeführt.
**/
public void gegenstandListener()
{
menuHilfeKontakt.addActionListener(new GegenstandHandler(this, model, null));
menuHilfeKontakt.setActionCommand("kontakt");
menuHilfeWillkommen.addActionListener(new GegenstandHandler(this, model, null));
menuHilfeWillkommen.setActionCommand("willkommen");
menuDateiOeffnen.addActionListener(new GegenstandHandler(this,model, null));
menuDateiOeffnen.setActionCommand("oeffnen");
menuDateiSpeichern.addActionListener(new GegenstandHandler(this,model, null));
menuDateiSpeichern.setActionCommand("speichern");
menuDatei.add(menuDateiBeenden);
menuDateiBeenden.addActionListener(new GegenstandHandler(this, model, null));
menuDateiBeenden.setActionCommand("beenden");
hinzufuegen.addActionListener(new GegenstandHandler(this, model, null));
hinzufuegen.setActionCommand("neuGegenstand");
suchButton.addActionListener(new GegenstandHandler(this, model, guiListe));
suchButton.setActionCommand("suchen");
wiederherstellen.addActionListener(new GegenstandHandler(this, model, guiListe));
wiederherstellen.setActionCommand("wiederherstellen");
}
public GegenstaendeFrame(Gegenstaende model)
{
this.model = model;
hauptFenster.pack();
hauptFenster.setSize(490,580);
hauptFenster.setLocationRelativeTo(null);
hauptFenster.setDefaultCloseOperation(EXIT_ON_CLOSE);
hauptFenster.setVisible(true);
hauptFenster.setJMenuBar(menuBar);
guiListe.GUIListe();
// Menuezeile installieren:
GegenstaendeFrameMenu();
//ActionListener aktivieren
gegenstandListener();
gegenstandInfo();
initFromModelHausratInfo();
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
}
public static void main (String[] args)
{
String lookAndFeelClass = UIManager.getSystemLookAndFeelClassName();
try {
UIManager.setLookAndFeel(lookAndFeelClass);
}
catch (Exception e) {
e.printStackTrace();
}
GegenstaendeFrame x = new GegenstaendeFrame(new Gegenstaende());
}
}
Zuletzt bearbeitet von einem Moderator: