JButton/Textfield im Fullscreenmode

timestamp

Mitglied Käsekuchen
Hi

Ich bringe es leider nicht fertig die genannten Komponenten im Fullscreenmode zu zeichnen.
Java:
	public static void draw(Graphics g, JFrame jframe){	
		JButton button = new JButton("Test");
		button.setLocation(50, 50);
		button.setVisible(true);
		button.setSize(100,20);		
		button.setBounds(50,50, 100, 20);
		g.setColor(Toolbox.COLOR_DEBUG);
		g.drawString("BLABLA", 400, 400);
		jframe.add(button);
                //jframe.repaint();		
	}

Lasse ich die repaint Zeile auskommentiert taucht er gar nicht auf. Entferne ich den Kommentar flackert das Programm wie blöde.
 
Hi,

wieso so umständlich? ich hab hier mal nen kleines Beispiel, dass ich asu deinem Quelltext erstellt habe, dass ein Fenster im Fullscreen-Mode mit dem von dir gewünschten Inahlt anziegt:

Java:
public static void main(String[] args){ 
        JFrame window = new JFrame("test");
        JButton button = new JButton("Test");
        button.setBounds(50,50, 100, 20);
        JLabel text = new JLabel("BLABLA");
        text.setBounds(400, 400, text.getWidth(), text.getHeight());
        window.add(button);
        window.add(text);
        window.pack();
        
        GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
        gd.setFullScreenWindow(window);
        window.setVisible(true);
    }
 
Hi,
Danke für deine Antwort. Ich weiß nicht was du bei mir als "umständlich" siehst. Das Problem ist, das der Button nicht von Anfang an vorhanden sein soll, sondern erst später während der Laufzeit (deswegen in einer extra Methode). Zusätzlich wird mittels der Graphics Methoden auf dem Bildschirm gezeichnet.
 
ich finde es umständlich, dass du dir dafür extra ein JFrame und ein Graphics übergeben lässt. Es reicht gänzlich aus eine Referenz auf den JButton zu haben und dann um entsprechenden Moment setVisible(true/false), je nach Bedarf, aufzurufen.

Schönen Abend noch, Technoblade
 
Graphics wird mit übergeben, weil weitere Zeichenvorgänge folgen.
Das Problem ist jetzt, dass sich der gesamte "Hauptcode" in einer Whileschleife befindet, die zu Beginn jeden durchlaufs momentan den Bildschirm schwarz ausfüllt (später mit Bildern). Der Button wird also schlichtweg übermalt. Mit window.pack() schaffe ich ein Flackern was selbst bei nicht Epileptikern einen Anfall auslöst. Der Button wird jedenfalls solange angezeigt bis die WhileSchleife beginnt. Danach "verschwindet" er, wird also übermalt. Wie kann ich das umgehen? Oder muss ich mir eigene Buttons bauen?
 
Frage ist : warum in einer Schleife und warum alles selbst zeichnen wollen ? So lange es "normale" Components sind reicht es diese einfach entsprechend zu adden und mit setVisible zu arbeiten. Also ich verstehe hier gerade echt nicht warum du es dir wirklich so umständlich machst. Warum genau musst du denn etwas selber zeichnen ? Sind es Bilder ? Einfach via ImageIcon in ein JLabel verpacken. Nur wenn es komplexe Graphiken sind die man nunmal nicht anderst darstellen kann außer wenn man sie selbst zeichnet würde ich dafür eine extra Klasse nehmen die meinetwegen von Component erbt damit ich dann mit dieser ebenso verfahren kann wie mit normalen Components. Also sorry wenn das jetzt schorff rüberkommt ... das soll es nicht ... aber ich stehe gerade auf dem Schlauch was du überhaupt genau vorhast xD
 
Hmm ... also dann würde ich einen ganz anderen Ansatz wählen. Ich würde alles was zu zeichnen ist auf JPanels zeichnen und diese mit setOpaque(true) durchsichtig setzen. So hast du dann sowas wie Sprites ... das macht sich bei sowas alle mal besser. Hat man schon zu Zeiten von Wolfenstein 3D und DOOM genutzt um auf einer 2D eben 3D zu simulieren ... also sollte man das für reine 2D nicht umständlicher machen ...
Wie Technoblade und ich schon sagten : du machst dir das viel zu kompliziert. Denk einfacher.
 
Ich hab mir euren Rat jetzt mal zu Herzen genommen:
Java:
ImageIcon icon = new ImageIcon("Data/Images/background.jpg");
JLabel background = new JLabel("TEST");
background.setBounds(0, 0, xres, yres);
background.setIcon(icon);
jframe.add(background);
JButton b = new JButton("Test");
b.setBounds(100,100,100,20);
jframe.add(b);

Leider muss ich mit der Maus erst über die Position des Buttons herüber fahren damit er sichtbar wird (vorher wird er vom Hintergrund verdeckt). Wie kann ich das denn umgehen?
 
Weil du vermutlich immer noch deinen Code mit der aufruf der PAINT-Methode drin hast ... diesen musst du erstmal auskommentieren ... ansonsten addest du nämlich etwas ... und dann wird über das vorgerenderte noch mal drübergezeichnet wenn du setVisible(true) aufrufst ... du musst ALLES aus der paint-Methode in sowas auslagern damit es auch so läuft wie du willst ... ansonsten wird immer als letztes mit der paint-Methode alles übermalt weil diese durch setVisible(true) als letztes aufgerufen wird
 
Zurück