Swing Bildschirm weiß :o

kruemelkeksfan

Aktives Mitglied
Hi Leute,
ich soll für die Schule ne kleine Simulation programmieren und dachte, ich übe da gleich mal ein bisschen Umgang mit Swing. Leider krieg ich beim besten Willen keine Elemente auf den Bildschirm.
Ich hab bis jetzt nur versucht, ein paar Textboxen und Labels darzustellen, aber es will nicht klappen :noe: Das Fenster öffnet sich zwar korrekt, aber es bleibt leer.
Sicherlich ist es nur ne Kleinigkeit, die ich vergessen hab (irgendein "add..." oder so 😳 ), findet vielleicht jemand beim ersten drübergucken schon den Fehler?

Vielen Dank im Voraus :toll:

Code:
package Kellner;

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class KellnerWindow extends JFrame
	{
	//VARIABLES
        GraphicsEnvironment environment;
        GraphicsDevice device;
        KellnerArea area;

	//CONSTRUCTOR
	public KellnerWindow ()
		{
		super ("Kleptomanischer Kellner");
		setLocationRelativeTo (null);
		setResizable (false);
		setUndecorated (true);
		setFocusableWindowState (true);
		setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
		}	

	//METHODS
        public static void main (String [] args)
        {
        KellnerWindow kellner = new KellnerWindow ();
        kellner.init ();
        }
        
        public void init ()
        {
//am Fullscreen kanns nicht liegen, der ist 1:1 aus nem funktionierendem Programm übernommen ;)
        environment = GraphicsEnvironment.getLocalGraphicsEnvironment ();
		device = environment.getDefaultScreenDevice ();
		if (device.isFullScreenSupported ())
			{
			device.setFullScreenWindow (this);
			}
                
        area = new KellnerArea (this);
        setLayout(new FlowLayout() );
        add (area);
        
//den Visible-false-true-Trick braucht man, damit der Fullscreen auf Mac funktioniert
        setVisible (false);
	setVisible (true);    
        }
        
	}
Code:
package Kellner;

import java.util.*;
import java.net.*;
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;

public class KellnerArea extends JPanel implements ActionListener
	{
	//VARIABLES
	KellnerWindow window;
        
        JPanel links50p;
        JPanel links1p;
        JPanel rechts50p;
        JPanel rechts1p;
        
	JTextField links50t;
        JTextField links1t;
        JTextField rechts50t;
        JTextField rechts1t;
	
	//CONSTRUCTOR
	public KellnerArea (KellnerWindow window)
		{
		setSize (window.getWidth (), window.getHeight ());

		this.window = window;		
		}	

	//METHODS
        public void init ()
        {
        links50p = new JPanel ();
        links1p = new JPanel ();
        rechts50p = new JPanel ();
        rechts1p = new JPanel ();
            
        links50t = new JTextField("", 5);
        links1t = new JTextField("", 5);
        rechts50t = new JTextField("", 5);
        rechts1t = new JTextField("", 5);
    
        setLayout(new FlowLayout() );
        
        links50p.add(new JLabel ("50-Cent-Münzen links:"));
        links50p.add(links50t);
        
        links1p.add(new JLabel ("1-Euro-Münzen links:"));
        links1p.add(links1t);
        
        rechts50p.add(new JLabel ("50-Cent-Münzen rechts:"));
        rechts50p.add(rechts50t);
        
        rechts1p.add(new JLabel ("1-Euro-Münzen rechts:"));
        rechts1p.add(rechts1t);

        links50t.addActionListener( this );
        links1t.addActionListener( this );
        rechts50t.addActionListener( this );
        rechts1t.addActionListener( this );
        
        add (links50p);
        add (links1p);
        add (rechts50p);
        add (rechts1p);
        
        this.setBackground(Color.black);         
        }
        
        public void actionPerformed( ActionEvent evt )  
        {
        
        repaint(); 
        }
        
	}
 
Hi,

es gibt mehrere Punkte, die du dir genauer anschauen könntest:

1. Möchtest du sicher dein Frame in 'FullScreen'-Modus anzeigen lassen?

if (device.isFullScreenSupported()) {
device.setFullScreenWindow (this);
}

Wenn nicht unbedingt gewollt, kannst die Frame-Größe hiermit anpassen:

setSize (400, 400);

2. In der Klasse KellnerArea ist zwar eine Methode init() definiert wird aber nie aufgerugen:

Am einfachstens ist wenn du den Konstruktor wie folgt erweiterst

//CONSTRUCTOR
public KellnerArea (KellnerWindow window)
{
setSize (window.getWidth (), window.getHeight ());

this.window = window;

init();
}

3. Willst du unbedingt setUndecorated(true); verwenden?

Wenn du die init-Methode im KellnerArea-Konstuktor (siehe 2) hinzufügst, sollte es funktionieren.
 
1. ja 😛opcorn:

2. Jup, danke, daran hats gelegen :toll: wie vermutet ein kleiner Schusselfehler. Wenn ich aber die init () schon im Konstruktor aufrufe, wo liegt dann ihr Sinn? Ich verwende sie ja im Regelfall, wenn ich Methoden des Objekts zum Konstruieren aufrufen muss, weil das bei mir manchmal nicht geklappt hat, wenn das Objekt noch nicht "fertig" war :rtfm:

3. Ich hab den Code aus einem Spiel übernommen, da ist "decorated" problematisch, weil ein 600px hohes Fenster dann auf einmal nicht mehr 600px hoch ist. Hab ich jetzt aber rausgeschmissen, spielt im Fullscreen ja eh keine Rolle 🙂

Danke für deine schnelle Hilfe :applaus: 🙂
 

Zurück
Oben