Swing Wo ist die Taskleiste?

Status
Nicht offen für weitere Antworten.

pinerski

Mitglied
Hallo,

schreibe gerade eine Applikation, die herausfinden soll, wo die (Windows) Taskleiste sich befindet und welche Maße sie hat.

Es geht darum, dass wenn ich in einem JFrame auf ein Textfeld klicke soll sich darunter eine Dialog öffnen, wenn Dialog sich aber mit der Taskleiste schneidet, dann soll es sich nach oben öffnen.

Hier mein Lösungsansatz um herauszufinden welche Fläche auf dem Bildschirm mir zur verfügung steht:


FrameInfoMax.java
Java:
package dimensionen;

import java.awt.BorderLayout;

import javax.swing.JPanel;
import javax.swing.JFrame;

public class FrameInfoMax extends JFrame {

	private static final long serialVersionUID = 1L;

	private JPanel jContentPane = null;

	public FrameInfoMax() {
		super();
		initialize();
	}

	private void initialize() {
		this.setContentPane(getJContentPane());
		this.setTitle("Frame Max");
		this.setUndecorated(false);
		this.setExtendedState(JFrame.MAXIMIZED_BOTH);
	}

	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
		}
		return jContentPane;
	}

	public int getPositionX() {
		return this.getLocationOnScreen().x + getOffset();
	}

	public int getPositionY() {
		return this.getLocationOnScreen().y + getOffset();
	}

	public int getDimensionWidth() {
		return this.getSize().width - (2 * getOffset());
	}

	public int getDimensionHeight() {
		return this.getSize().height - (2 * getOffset());
	}

	private int getOffset() {
		return jContentPane.getLocationOnScreen().x - this.getLocationOnScreen().x;
	}
}

Dazu öffne ich jedesmal ein jFrame im Maximalen zustand und gib dann die Maße aus.
Finde es etwas zu umständlich, funktioniert aber.
Vielleicht hat jemand eine andere Idee....

Java:
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
hiermit bekomme ich leider nur die absoluten Maße meines Bildschirms.


Hier noch die Main-Class

MainInfoAusgabe.java
Java:
package dimensionen;

import java.awt.Point;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class FrameInfoAusgabe implements WindowListener {

	private FrameInfoMax fMax = null;

	public Point LO = null;

	public Point RO = null;

	public Point LU = null;

	public Point RU = null;

	public FrameInfoAusgabe() {
		fensterOeffnen();
	}

	public static void main(String[] args) {
		new FrameInfoAusgabe();
	}

	public void windowOpened(WindowEvent arg0) {
		setzeWerte(arg0);
	}

	private void fensterOeffnen() {
		if (fMax == null) {
			fMax = new FrameInfoMax();
			fMax.addWindowListener(this);
			fMax.setVisible(true);
		}
	}

	private void fensterSchliessen() {
		if (fMax != null) {
			fMax.setVisible(false);
			fMax.dispose();
			fMax = null;
		}
	}

	private void setzeWerte(WindowEvent arg0) {
		LO = new Point(fMax.getPositionX(), fMax.getPositionY());
		RO = new Point((fMax.getDimensionWidth() + fMax.getPositionX()), fMax.getPositionY());
		LU = new Point(fMax.getPositionX(), (fMax.getDimensionHeight() + fMax.getPositionY()));
		RU = new Point((fMax.getDimensionWidth() + fMax.getPositionX()), (fMax.getDimensionHeight() + fMax
				.getPositionY()));
		fensterAusgabe();
		fensterSchliessen();
	}

	public void fensterAusgabe() {
		System.out.println("LO: " + LO.x + " " + LO.y);
		System.out.println("RO: " + RO.x + " " + RO.y);
		System.out.println("LU: " + LU.x + " " + LU.y);
		System.out.println("RU: " + RU.x + " " + RU.y);
	}

	public void windowClosed(WindowEvent arg0) {
	}

	public void windowClosing(WindowEvent arg0) {
	}

	public void windowDeactivated(WindowEvent arg0) {
	}

	public void windowDeiconified(WindowEvent arg0) {
	}

	public void windowIconified(WindowEvent arg0) {
	}

	public void windowActivated(WindowEvent arg0) {
	}

}
 

Verjigorm

Top Contributor
wieso im Dialog nicht setLocationRelativeTo(null); ?
Das macht doch eigentlich genau das, was du möchtest oder nicht?
*kopfkratz*
 

pinerski

Mitglied
Hab es gerade mit
Java:
meinDialog.setLocationRelativeTo(jTextField);
ausprobiert.

Klappt aber leider nicht den meinDialog verdeckt dann das jTextField, es sollte sich aber darunter öffnen. Und die Taskleiste wird auch nicht beachtet, spricht meinDialog ist somit teilweise unter der Taskleiste.
 

Verjigorm

Top Contributor
Hat es einen bestimmten Grund, wieso du dieses Textfeld als "Anker" benutzt?
Was soll das bringen?
Beschreib uns dochmal genauer, was du vorhast
 

pinerski

Mitglied
Also ich möchte eine Application schreiben um z.B Termine zu speicheren.

Jetzt habe ich im Hauptfenster ein Textfeld, wo ich ein Datum eingeben kann. Um das ganze etwas benutzerfreundlicher zugestalten habe ich in einem Dialogfenster einen kleinen Kalender programmiert. Wenn ich nun auf dem Button neben den Textfeld klicke soll sich nun das Dialogfenster öffnen, um dann das Datum auszuwählen.

Lade mal 2 Screenshots mit hoch.

Wenn das Hauptfenster nun zu tief ist wie in Bild2 dann soll es sich eben über dem Textfeld öffnen.
 

Anhänge

  • bild1.jpg
    bild1.jpg
    24 KB · Aufrufe: 56
  • bild2.jpg
    bild2.jpg
    21,1 KB · Aufrufe: 48

Verjigorm

Top Contributor
Du könntest
Component (Java 2 Platform SE v1.4.2))
auf das Textfeld abfragen, die Auflösung vom Bildschirm haste ja.
Dann sagste einfach, wenn das Textfeld näher als xx Pixel am Bildschirmboden ist, dann setze es nach oben, ansonsten nach unten


edit: getLocationOnScreen(), scheiss Link
 
Zuletzt bearbeitet:

pinerski

Mitglied
Naja wie oben gesagt mein Problem ist, wenn ich die genauen Maße vom Bildschirm haben möchte (ohne Taskleiste), dann muss ich erstmal mit
setExtendedState(JFrame.MAXIMIZED_BOTH);
ein FensterMaximieren die Maße vom Fenster abfrage und dann das Fenster wieder schliessen. Somit kommt es dann immer kurz zum flackern.
 

pinerski

Mitglied
Also hast du auch keine Ahnung:(. Sehe ich das richtig?

Vielleicht gibt es ja jemand anderes der eine Idee hat?
 
T

tuxedo

Gast
Naja wie oben gesagt mein Problem ist, wenn ich die genauen Maße vom Bildschirm haben möchte (ohne Taskleiste), dann muss ich erstmal mit
setExtendedState(JFrame.MAXIMIZED_BOTH);
ein FensterMaximieren die Maße vom Fenster abfrage und dann das Fenster wieder schliessen. Somit kommt es dann immer kurz zum flackern.


Dann mach das doch ein einziges mal bei Programmstart und nicht "ständig". So oft wird die Lage und Größe der Taskleiste nicht ändern.

Allerdings könnte ich mir vorstellen dass es eine Methode gibt mit der du den Nutzbaren Desktopbereich raus bekommst.

- Alex

[update]

Siehe zweiter Post: Java Desktop Applications - need help @ windows screen-size (excluding size of taskbar)
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
am einfachsten nimmst du swingx und nimmst den JXDatePicker sieht nicht schlecht aus und erledigt das alles für dich ;)
 

pinerski

Mitglied
Nach langen suchen hab ich jetzt die Lösung.

Einfach in eineim JFrame folgendes abfragen

Java:
GraphicsConfiguration gc = this.getGraphicsConfiguration();
		
		Insets insects = Toolkit.getDefaultToolkit().getScreenInsets(gc);

		System.out.println("insects:::"+insects);

und schon weiß man wo sich die Taskleiste sich befindet und wie breit sie ist.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Swing pack() Problem mit Taskleiste AWT, Swing, JavaFX & SWT 4
L JFrame von der Taskleiste zu den ausgeblendeten Symbolen verschieben AWT, Swing, JavaFX & SWT 2
M Anzahl Frames in Taskleiste AWT, Swing, JavaFX & SWT 2
qwerqer Swing Anwendung soll blinken (Taskleiste) AWT, Swing, JavaFX & SWT 3
R Anwendung ohne Symbol in der Taskleiste AWT, Swing, JavaFX & SWT 3
U JDialog ohne Taskleiste AWT, Swing, JavaFX & SWT 7
H Swing Symbol in Taskleiste dynamisch aus- bzw. einblenden AWT, Swing, JavaFX & SWT 14
BattleMaster246 Swing Nicht in Taskleiste zeigen AWT, Swing, JavaFX & SWT 6
reibi SWT Breite Taskleiste herausfinden AWT, Swing, JavaFX & SWT 2
R Programm nicht mehr in der Taskleiste AWT, Swing, JavaFX & SWT 2
H Swing JFrame als zweite Taskleiste AWT, Swing, JavaFX & SWT 6
K Programmsymbol (in der Taskleiste) blinken lassen AWT, Swing, JavaFX & SWT 5
T Programm in die Taskleiste AWT, Swing, JavaFX & SWT 3
K frame minimieren in taskleiste AWT, Swing, JavaFX & SWT 5
Iron Monkey JFrame in der Taskleiste maximieren AWT, Swing, JavaFX & SWT 4
T Laufschrift in Taskleiste ala NetspeedMonitor AWT, Swing, JavaFX & SWT 6
hdi JFrame ohne Eintrag in der Taskleiste AWT, Swing, JavaFX & SWT 12
D JFrame in Taskleiste: Symbol nach automatischer Gruppierung AWT, Swing, JavaFX & SWT 5
? Java-SWT-Anwendung in der Taskleiste nicht sichtbar AWT, Swing, JavaFX & SWT 6
G Masken und Taskleiste, ALT-TAB AWT, Swing, JavaFX & SWT 29
vogella Größe des verfügbaren Screens (abzgl. der Taskleiste) AWT, Swing, JavaFX & SWT 2
G Tschnell-Taskleiste mit swing AWT, Swing, JavaFX & SWT 6
TheJavaKid JFrame in Taskleiste anlegen (Minimieren) AWT, Swing, JavaFX & SWT 5
L Taskleiste verdecken AWT, Swing, JavaFX & SWT 4
C Java Programm wie Windows Taskleiste AWT, Swing, JavaFX & SWT 2
G Window in Taskleiste AWT, Swing, JavaFX & SWT 13
H fenster minimiern nich in taskleiste sondern in programm AWT, Swing, JavaFX & SWT 2
D Wechsel in Taskleiste führt zu verschwninden von Dialog AWT, Swing, JavaFX & SWT 18

Ähnliche Java Themen


Oben