Unsichtbar zeichnen.

Status
Nicht offen für weitere Antworten.

DocMcFly

Bekanntes Mitglied
Hallo,

Ausgangssituation:
Ich hab nen JFrame mit einem JDesktopPane drin. Auf dem JDesktopPane sollen JInternalFrames angeordnet werden. Schön wäre es, dass alles schon geordnet ist, wenn ich den JFrame auf sichbar schalte.
Wenn ich aber jetzt dem JInternalFrame sage er soll an einer bestimmten Stelle stehen, dann braucht er ja die Größe vom JDesktopPane. Der JDesktopPane kennt seine Größe aber noch nicht, wenn er noch nicht gezeichnet wurde!

Behelfslösung:
zZ Verwenden ich folgende Zeilen zum schnellen Zeichnen.

Code:
this.applicationFrame.setEnabled(false);
this.applicationFrame.setVisible(true);
this.applicationFrame.setVisible(false);
this.applicationFrame.setEnabled(true);

So blitzt der JFrame kurz auf... aber das ist nicht schön.

Frage:
Normalerweise wird der JFrame erst gezeichnet, wenn setVisible(true) ausgeführt wird - Oder geht das noch irgendwie anders?
Kann man das Zeichnen unsichtbar machen? Also dass nur virtuell der JFrame gezeichnet wird?

Nachtrag:
Ich hab jetzt den JFrame mal kurz außerhalb des Bildschrims setLocation( -10000, -10000) gezeichnet... das funktioniert. Aber gibt es noch eine elegantere Lösung?


Danke fürs Lesen und Antworten...

Clemens
 

Wildcard

Top Contributor
Warum nicht die Position setzen nachdem du den Frame visible gemacht hast?
Das geht viel zu schnell als das der User davon was mitbekommen würde.
 

DocMcFly

Bekanntes Mitglied
Wenn ich setLocation garnicht setzte, dann wird das Fenster links-oben (0,0) gezeichnet.

Das Zeichnen sieht man: ein grauer Kasten blitzt kurz auf. Das fand ich nicht schön...

Also zeichne ich das Fenster erst im Nirvana (außerhalb der Bildschirmauflösung). Meine Frage geht das eleganter? Kann man Dinge in Swing zeichnen, ohne dass man sie sieht? (Kling kurios - möcht ich aber... :roll: )

Gruß Clemens
 

Wildcard

Top Contributor
Das ganze kommt mir kurios vor. Ich spreche ja nicht davon den ganzen Frame zu verschieben, sondern nur die JInternalFrames. Davon abgesehen das du die größe der DesktopPane überhaupt nicht kennen musst um die Frames zu platzieren, sollte dir die Größe zum Programmstart doch ohnehin bekannt sein...
 

FinalbrainXP

Aktives Mitglied
Verstehe das Prob auch nicht wirklich. Also du willst das Frame unsichtbar haben und dann nen paar InternalFrames richtig positionieren und dann das Frame darstellen und ohne jeglichen Flacker ? Also bei mir flackerts minimal, aber weiss nicht ob das überhaupt so behebbar ist ?

Hier ne Demo, teste die mal, ob es das Flackern ist welches du meinst.



Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;

public class Demo extends JFrame
{
	private static JInternalFrame f1;
	private static JInternalFrame f2;
	private static JInternalFrame f3;
	private static JDesktopPane 	j;
	
		
	public static void main(String[] args)
    {
     	Demo frame = new Demo();
       	frame.setVisible(true);
       	
       	Random zufall = new  Random();
     	       	
       	for (int i=0;i<100;i++)
       	{
       		 try
       		 {
       			Thread.sleep(1000);
       		 }
       		 catch(Exception e)
       		 {
       		 }

       		 frame.setVisible(false);
       		 
       		 int jWidth = (int)j.getBounds().getWidth();
        	 int jHeight = (int)j.getBounds().getHeight();
        	 
        	 f1.setBounds(zufall.nextInt(jWidth-50-(int)f1.getBounds().getWidth()),
        	 zufall.nextInt(jHeight-50-(int)f1.getBounds().getHeight()),
        	 (int)f1.getBounds().getWidth(),(int)f1.getBounds().getHeight());
        	 
        	 f2.setBounds(zufall.nextInt(jWidth-50-(int)f2.getBounds().getWidth()),
        	 zufall.nextInt(jHeight-50-(int)f1.getBounds().getHeight()),
        	 (int)f2.getBounds().getWidth(),(int)f2.getBounds().getHeight());
        	 
        	 f3.setBounds(zufall.nextInt(jWidth-50-(int)f3.getBounds().getWidth()),
        	 zufall.nextInt(jHeight-50-(int)f3.getBounds().getHeight()),
        	 (int)f3.getBounds().getWidth(),(int)f3.getBounds().getHeight());
        	 
        	 frame.setVisible(true);		
       	}
 		
	}
      
	public Demo()
    {
    	setTitle("Demo");
        this.setLayout(null);
       	this.setBounds(0,0,400,400);
        
        this.addWindowListener
        (
            new WindowAdapter()
            {
                public void windowClosing(WindowEvent e)
                {
                	System.exit(0);
                }
            }
        ); 
        
        j = new JDesktopPane();
        
        j.setLayout(null);
        j.setBounds(0,0,(int)this.getBounds().getWidth(),
        			(int)this.getBounds().getHeight());
                   
        f1 = new JInternalFrame();
        f2 = new JInternalFrame();
        f3 = new JInternalFrame();
                
        int fWidth = (int)j.getBounds().getWidth()/2;
        int fHeight = (int)j.getBounds().getHeight()/2;
        
        f1.setBounds(0,0,fWidth,fHeight);
        f1.setTitle("f1");
        f1.setVisible(true);
        
        f2.setBounds(32,32,fWidth,fHeight);
        f2.setTitle("f2");
        f2.setVisible(true);
        
        f3.setBounds(64,64,fWidth,fHeight);
        f3.setTitle("f3");
        f3.setVisible(true);
        
        j.add(f1);
        j.add(f2);
        j.add(f3);
 		
 		this.add(j);

    }
    
 }
 

DocMcFly

Bekanntes Mitglied
Da wo es blitzt hast Du ne Sekunde sleep eingebaut...

Ich versuch es noch mal zu erklären:
Zu Beginn ist das Fenster _nicht_ da!

Der JDesktopPane hat erst seine Größe, wenn der LayoutManager vom JFrame-ContentPane, weiß wohin und wie groß alles angeordnet werden soll...

Wenn ich dann ein JInternalFrame zB in der Mitte haben möchte, muss erst die Größe vom JDesktopPane da sein. Damit diese da ist, muss erst der JFrame gezeichnet werden. Verstehste?

Da aber noch garnichts gezeichnet wurde... steht in der Größe vom JDesktopPane 0 , 0 !

Davon kannst Du keine Mitte ausrechnen? das ist mein Problem...

Also würde ich gerne erst den JFrame inkl. JDesktopPane unsichtbar zeichnen lassen. So dass der JDesktopPane eine Größe hat und ich den JInternalFrame positionieren kann...

Clemens
 

FinalbrainXP

Aktives Mitglied
Hmm..ehrlich gesagt verstehe ich garnichts *gg

Rein vom Theoretischen: Die größe muß VOR dem Zeichnen bekannt sein, sonst könnte es ja ganricht gezeichnet werden. Leg doch alle deine Größen vorher fest..speichere sie irgendwo....irgendwo musst du ja was festelegen.
Die location oder Size vom JFrame zum beispiel. Zeig mal deinen relevanten Code, wo die Größenberechnungen etc. drinnen sind.
 

DocMcFly

Bekanntes Mitglied
Guten Morgen...

Rein vom Theoretischen: Die größe muß VOR dem Zeichnen bekannt sein, sonst könnte es ja ganricht gezeichnet werden.

Ja, die Außenmaße vom JFrame drum herum weiß ich! Aber wenn ich in den ContentPane des JFrames eine Statuszeile, ein Menü und ein DesktopPane werfe und das ganze mit einem LayoutManager gepaart, dann weiß ich eben nicht! wie groß später mein DesktopPane gezeichnet wird!

Diese Maß hätte ich aber gerne _bevor_ der JFrame gezeichnet wird! Drum mein einfache Frage: Kann man unsichtbar zeichnen? Oder das Zeichnen simulieren?

Alle enthaltenen LayoutManager sollen schon mal die Größen und Positionen berechnen bevor ich was sehe....

Danke wieder fürs Lesen und Antworten...

Clemens

PS: Der Code würde euch nicht viel nutzen, da mein Prog ein Hybrid ist - das Prog verwendet JDialoge oder JInternalFrames über die selbe Schnittstelle.

PS: Sorry, falls der Text oben leicht aggressiv klingen sollte! Soll er aber nicht....[/quote]
 

Jörg

Bekanntes Mitglied
nur mal so ins blaue hinein ... hilft dir
Code:
pack()
vielleicht?
 

thE_29

Top Contributor
Zeichne es auf -1000,-1000!

Und ja, swing zeichnet nur, wenn es zu "sehen" ist!

Ich mache so eine Druckmethode, indem ich einen JFrame auf -1000,-1000 anzeigen lasse und den ausdrucke!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Lable sichtbar/unsichtbar toggeln AWT, Swing, JavaFX & SWT 2
MrSnake ComboBox-Einträge werden unsichtbar AWT, Swing, JavaFX & SWT 0
R Komponenten von JPanel bleiben unsichtbar AWT, Swing, JavaFX & SWT 2
P JTextField unsichtbar machen AWT, Swing, JavaFX & SWT 2
Z Swing Swing: Elemente werden doppel/verschoben gezeichnet, sind teils unsichtbar etc... AWT, Swing, JavaFX & SWT 10
P JScrollBar designen oder unsichtbar machen AWT, Swing, JavaFX & SWT 10
H Komponenten unmittelbar nach dem Ausführen teilweise unsichtbar AWT, Swing, JavaFX & SWT 3
R Swing Komponenten bleiben bei Animation unsichtbar AWT, Swing, JavaFX & SWT 7
A jformattedtextfield unsichtbar und wieder sichtbar machen AWT, Swing, JavaFX & SWT 13
R JApplet, Elemente unsichtbar AWT, Swing, JavaFX & SWT 2
J SWT JFace Tree in Section unsichtbar (Eclipse Forms) AWT, Swing, JavaFX & SWT 5
GianaSisters Swing jTable Daten unsichtbar AWT, Swing, JavaFX & SWT 12
B bin am verzweifeln, will auf knopfdruck durch ne überprüfung die labels unsichtbar machen AWT, Swing, JavaFX & SWT 2
E Alles unsichtbar machen AWT, Swing, JavaFX & SWT 12
S ButtonGroups sichtbar/unsichtbar? AWT, Swing, JavaFX & SWT 4
Z JTable Werten unsichtbar?! AWT, Swing, JavaFX & SWT 12
J Layer von JLayeredPane unsichtbar durchsichtig in den Hintergrund AWT, Swing, JavaFX & SWT 5
G Tabelle Spalten unsichtbar machen AWT, Swing, JavaFX & SWT 5
M Dialag oder Frame bleibt unsichtbar AWT, Swing, JavaFX & SWT 10
O JButton Rand um Schrift unsichtbar machen AWT, Swing, JavaFX & SWT 2
G Komponenten mehr als unsichtbar machen AWT, Swing, JavaFX & SWT 5
P [SWT] FileDialog unsichtbar machen bzw. positionieren AWT, Swing, JavaFX & SWT 8
P JPanel am Anfang unsichtbar AWT, Swing, JavaFX & SWT 4
S Elemente des JTree unsichtbar? AWT, Swing, JavaFX & SWT 8
H JApplet fehler objekte unsichtbar. AWT, Swing, JavaFX & SWT 2
B XP-LookAndFeel + modifizierter JTableHeader unsichtbar AWT, Swing, JavaFX & SWT 3
R Componente in JTabbedPane unsichtbar AWT, Swing, JavaFX & SWT 4
D JTable Spalte unsichtbar machen AWT, Swing, JavaFX & SWT 6
M Mandelbrot mit BigDecimal erstellen und in der UI zeichnen, funktionierte nicht. AWT, Swing, JavaFX & SWT 1
H JavaFX Canvas neu zeichnen anstoßen AWT, Swing, JavaFX & SWT 34
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
S Event Handling Neu zeichnen nur wenn Berechnung fertig ist AWT, Swing, JavaFX & SWT 4
W JavaFX Ich kann keinen Kreis richtig zeichnen AWT, Swing, JavaFX & SWT 8
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
G Dreieck aus Pixeln zeichnen AWT, Swing, JavaFX & SWT 8
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
Z Swing Graph zeichnen lassen AWT, Swing, JavaFX & SWT 16
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
L Swing zeichnen AWT, Swing, JavaFX & SWT 14
S GUI Kreuz zeichnen und Position ausgeben AWT, Swing, JavaFX & SWT 3
S GUI Kreis zeichnen AWT, Swing, JavaFX & SWT 13
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
L Swing Ein Rechteck in ein Grid Zeichnen AWT, Swing, JavaFX & SWT 5
L JavaFX Animation, erst zeichnen dann anzeigen AWT, Swing, JavaFX & SWT 4
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
E Transparent zeichnen AWT, Swing, JavaFX & SWT 2
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
T Tic Tac Toe - GUI Linien zeichnen AWT, Swing, JavaFX & SWT 14
C Applet Zeichnen über Button-Click AWT, Swing, JavaFX & SWT 13
Soloeco Graph zeichnen AWT, Swing, JavaFX & SWT 1
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
D Quadrat, Rechteck zeichnen AWT, Swing, JavaFX & SWT 3
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
A Swing JRadioButton zeichnen nicht AWT, Swing, JavaFX & SWT 4
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
P 2D-Grafik Bogen(Arc) zwischen zwei Punkten zeichnen AWT, Swing, JavaFX & SWT 2
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
S Parallele Linien zeichnen AWT, Swing, JavaFX & SWT 5
J Linien auf JPanel zeichnen AWT, Swing, JavaFX & SWT 3
P AWT Canvas freihändig zeichnen AWT, Swing, JavaFX & SWT 1
llabusch Linien in JPanel zeichnen AWT, Swing, JavaFX & SWT 6
S passende PaintComponent ? Zeichnen in TextArea mit Scrollpane ? AWT, Swing, JavaFX & SWT 2
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
L JavaFX JavafX Timelime zeichnen und schön stylen? AWT, Swing, JavaFX & SWT 2
I JFrame neu zeichnen, nicht überzeichnen! AWT, Swing, JavaFX & SWT 2
I Spielsteine zeichnen und entfernen AWT, Swing, JavaFX & SWT 3
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
H Swing BufferedImage zeichnen AWT, Swing, JavaFX & SWT 1
M JFreeChart neu zeichnen sich Wenn Jtable sich ändert AWT, Swing, JavaFX & SWT 5
S 2D-Grafik MouseDragged Linien zeichnen AWT, Swing, JavaFX & SWT 4
M Zeichnen ohne vorherige Linien zu löschen AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
T Swing / Kreis zeichnen AWT, Swing, JavaFX & SWT 2
I Text zur Linie zeichnen AWT, Swing, JavaFX & SWT 1
I Pfeil zeichnen am Ende einer Linie AWT, Swing, JavaFX & SWT 1
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
F Zeichnen des Button AWT, Swing, JavaFX & SWT 4
B Zeichnen mit paintComponent? Oder anders? AWT, Swing, JavaFX & SWT 15
C Swing Aus verschiedenen Klassen zeichnen. AWT, Swing, JavaFX & SWT 2
C Swing BufferedImage zeichnen und JLabels setzen. AWT, Swing, JavaFX & SWT 17
M Kein Zeichnen der Figuren auf JPanel AWT, Swing, JavaFX & SWT 4
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S Quadrat auf Frame zeichnen AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
C Graphics Objekt in Zeitschleife zeichnen AWT, Swing, JavaFX & SWT 4
X Swing JPanel mehrere Ebenen zeichnen AWT, Swing, JavaFX & SWT 13
G Zeichnen auf eine schwergewichtige Komponente? AWT, Swing, JavaFX & SWT 0
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
P SWT Nebula Gallery - Bildbereiche zeichnen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
A 2D-Grafik Zeichnen einer sich bewegenden Box mit BufferStrategy zieht Spur AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben