[Ubuntu] Gnome3-Panel always on top

Speedy_92

Mitglied
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:

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

oder

Java:
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
 

PCHSwS

Mitglied
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

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

So, bei mir geht's in der 1.7 nur, wenn ich das
Java:
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)
 
Zuletzt bearbeitet:

Speedy_92

Mitglied
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

Mitglied
So, ich hab nochmal ein bisschen rumprobiert, und bin zum Ergebnis gekommen, dass folgender Code immer wie gewünscht läuft:
Java:
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

Mitglied
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

Mitglied
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
 

Ähnliche Java Themen

Neue Themen


Oben