# [Ubuntu] Gnome3-Panel always on top



## Speedy_92 (31. Mai 2012)

Hallo,
ich versuche einen Fullscreen-Modus für mein Programm zu erstellen und habe bei Ubuntu/Linux das Problem, dass das Gnome3-Panle immer über meiner Anwendung steht.
Ich habe es auf 2 verschiedene Weisen versucht und es klappt dennoch nicht:


```
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice myDevice = ge.getDefaultScreenDevice();
this.setUndecorated(true);
this.setAlwaysOnTop(true);
myDevice.setFullScreenWindow(this);
```

oder


```
this.setUndecorated(true);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
```

Das Top-Panel ist dennoch immer noch OnTop. Bei dem ersten Beispiel ist die Applikation wirklich Fullscreen, das Panel dadrüber. Bei dem zweiten Beispiel füllt die Anwendung nur den Bereich unterhalb des Panels.

Gruß,
Speedy_92


----------



## Speedy_92 (3. Jun 2012)

*push*
Keiner eine Idee? Oder sollte ich vielleicht in einem Ubuntu-Forum nachfragen?


----------



## PCHSwS (4. Jun 2012)

Ich wollte eh mal Gnome installieren, ich teste es mal bei mir, ob es da genau so ist.

Aber wenn, würde ich dir GNOME (Ubuntu) ? Forum ? ubuntuusers.de empfehlen.

MfG, PCHSwS


----------



## PCHSwS (5. Jun 2012)

Kleine Frage: Nutzt du die JRE 1.6 oder die 1.7?


----------



## PCHSwS (5. Jun 2012)

So, ich habs bei mit jetzt mit der JRE1.6 ausprobiert - bei mir ist das Panel im Hintergrund, und der Frame undecorated im Vordergrund - genau so wie es sein sollte.

Ich teste es nochmal mit der 1.7.

MFG, PCHSwS


----------



## PCHSwS (5. Jun 2012)

So, ich habs mit der JRE1.7 getestet - und da geht es *nicht*.

Versuch du es mal mit der JRE1.6, ob es da geht.

MfG, PCHSwS


----------



## PCHSwS (5. Jun 2012)

Speedy_92 hat gesagt.:


> ```
> GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
> GraphicsDevice myDevice = ge.getDefaultScreenDevice();
> this.setUndecorated(true);
> ...



So, bei mir geht's in der 1.7 nur, wenn ich das 
	
	
	
	





```
this.setAlwaysOnTop(true);
```
 weglasse. Allerdings kann ich auch mit etwas im Hintergrund fokussieren - es hat also eh keinen Effekt / Sinn 

MfG, PCHSwS (Mit freundlicher Unterstützung von Ulic Quel-Droma)


----------



## Speedy_92 (5. Jun 2012)

Vielen Dank erst einmal für das ganze Testen! Benutze 1.7.
Mir ist aufgefallen, dass das Panel im Vordergrund ist, wenn ich die Anwendung starte. Tabbe ich nun mit Alt+Tab zu einer anderen Anwendung und wieder zurück, so befindet sich das Panel hinter meiner Anwendung.
Nun ist die Frage, wie ich es schaffe, dass es von Beginn an wie erwünscht ist.

Gruß,
Speedy_92


----------



## PCHSwS (5. Jun 2012)

So, ich hab nochmal ein bisschen rumprobiert, und bin zum Ergebnis gekommen, dass folgender Code immer wie gewünscht läuft:

```
import java.awt.FlowLayout;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
//import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.AbstractAction;

@SuppressWarnings({ "serial"})
public class Frame extends JFrame implements ActionListener {
 
 private JButton gross, klein, exit;
 

 /**
  * @param args
  */
 public static void main(String[] args) {
  Frame frame = new Frame();
  frame.setVisible(true);
 }

 public Frame(){
  setLayout(new FlowLayout());
  gross = new JButton("Groß");
  gross.addActionListener(this);
  klein = new JButton("Klein");
  klein.addActionListener(this);
  exit = new JButton(new AbstractAction("Exit"){
	@Override
	public void actionPerformed(ActionEvent arg0) {
		System.exit(0);
	} 
  });
  add(exit);
  add(gross); add(klein);
  pack();
  setDefaultCloseOperation(DISPOSE_ON_CLOSE);
 }

 @Override
 public void actionPerformed(ActionEvent e) {
  JButton src = (JButton) e.getSource();
  if(src == gross){
   GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
   GraphicsDevice myDevice = ge.getDefaultScreenDevice();
   dispose();
   this.setUndecorated(true);
   setVisible(true);
   //this.setAlwaysOnTop(true);
   myDevice.setFullScreenWindow(this);
  }
  else{
   GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
   GraphicsDevice myDevice = ge.getDefaultScreenDevice();
   dispose();
   this.setUndecorated(false);
   setVisible(true);
   myDevice.setFullScreenWindow(null);
   //this.setAlwaysOnTop(false);
   pack();
  }
 }

}
```

Kannst du das mal bei dir testen, was da bei raus kommt?


----------



## Speedy_92 (5. Jun 2012)

Hat super funktioniert. Ich habe erst überlegt, ob es daran liegt, dass ich Java3D benutze, aber das sollte eigentlich nichts zur Sache tun. Schließlich läuft die Anwendung dennoch in nem JFrame.

Der Unterschied ist, dass deine Anwendung erst ein Fenster war und anschließend Fullscreen gemacht wurde. Ich habe jetzt auch erst mein Fenster vollständig erstellen lassen und es wird hinterher vergrößert.
Alles top jetzt


----------



## PCHSwS (5. Jun 2012)

Der Code ist aber nur zu 2% von mir, der Rest ist von Ulic. Musst dich eigentlich auch bei dem Bedanken - ich hab nur das ganze Rumprobieren gemacht^^

Kannst das Thema ja dann als gelöst markieren, außer es geht noch was nicht.

MfG, PCHSwS


----------

