Swing Location und Height/Width nicht kompatibel?

Spitfire777

Bekanntes Mitglied
hi,

hab hier ne methode geschrieben, die ein frame an ein anderes "andocken" lässt.

Java:
    public void dockToFrame(AbstractFrame frame, int position) {

        switch (position) {
            case 1:
                int availableSpace = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth() - getSize().getWidth() - frame.getSize().getWidth());

                if (availableSpace > 0) {
                    setLocation((int) availableSpace, (int) frame.getLocation().getY());
                }

                break;

        }
    }

Jetzt ists aber so, dass zwar das Frame andockt, jedoch sehr ungenau. Ich könnte jetzt anfangen, Pixel zu addieren/subtrahieren, aber das wäre keine saubere Lösung.
 

Spitfire777

Bekanntes Mitglied
Ups, ich hab da einen alten Code kopiert.

Unten ist der richtige.
Mit ungenau meine ich, dass sie sich etwas überlappen (Windows), unter Ubuntu guck ich nacher mal, sollte aber aber auch dasselbe Problem sein.

Java:
public abstract class AbstractFrame extends JFrame {
    public static final int LEFT = 1;
    public static final int RIGHT = 2;
    public static final int BOTTOM = 3;
    public static final int TOP = 4;

    public void centerFrame() {
        int screensizeX = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();
        int screensizeY = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();
        int windowsizeX = (int) getSize().getWidth();
        int windowsizeY = (int) getSize().getHeight();

        setLocation((screensizeX - windowsizeX) / 2, (screensizeY - windowsizeY) / 2);
    }

    public void posRightTop() {
        int screensizeX = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();
        int screensizeY = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();
        int windowsizeX = (int) getSize().getWidth();
        int windowsizeY = (int) getSize().getHeight();

        setLocation(screensizeX - windowsizeX - 5, 5);
    }

    public void posLeftTop() {
        setLocation(0, 0);
    }

    public void dockToFrame(AbstractFrame frame, int position) {

        switch (position) {
            case 1:
                int availableSpace = (int) (frame.getLocation().getX() - getSize().getWidth());

                if (availableSpace > 0) {
                    setLocation((int) availableSpace, (int) frame.getLocation().getY());
                }

                break;

        }
    }
}

Dann am besten zwei einfache Frameklassen nehmen und von AbstractFrame ableiten.

Java:
public class Main {
public static void main(String[] args) {
FrameXY frame1 = new FrameXY();
FrameXY frame2 = new FrameXY();
frame1.setVisible(true);
frame2.setVisible(true);

// frame1 an frame2 andocken
frame1.dockToFrame(frame2, AbstractFrame.LEFT);
} 
}
 

Spitfire777

Bekanntes Mitglied
Hmm..

dann liegts an Windows >(

berlappene6e1.png


Ich könnte ja sicherlich jetzt das Betriebssystem auslesen und im Falle von Windows Pixel addieren bzw. subtrahieren. Aber gibts da nicht was eleganteres?
 
G

Gelöschtes Mitglied 20545

Gast
Was 'n Zufall, an der Methode hab ich grad gebastelt. Ich kopier sie mal ganz faul, wobei CURRENTDIALOG das anzudockende und MAINFRAME das (Überraschung) "Hafenfenster" ist. Die if-Abfrage prüft zusätzlich, ob das Fenster minimiert ist.

Java:
public void focusCurrentDialog(){
	if(CURRENTDIALOG.getState()==JFrame.ICONIFIED) CURRENTDIALOG.setState(JFrame.NORMAL);
	Point pos = MAINFRAME.getLocationOnScreen();
	CURRENTDIALOG.setLocation(pos.x+MAINFRAME.getWidth(),pos.y);
	CURRENTDIALOG.requestFocus();
}
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
L JSplitPane Divider Location beim Maximieren AWT, Swing, JavaFX & SWT 6
M JavaFX java.lang.IllegalStateException: Location is not set. AWT, Swing, JavaFX & SWT 9
J JFram Location aus Konstruktor einer anderen Klasse auslesen AWT, Swing, JavaFX & SWT 10
P JFrame Location-/Size-Probleme AWT, Swing, JavaFX & SWT 5
D Swing JCombobox - Tooltip Location ändern AWT, Swing, JavaFX & SWT 4
Daniel_L Drop von Dateien auf Frame - welche Drop-Location? AWT, Swing, JavaFX & SWT 2
P [JTree] Markierhilfe der Drop-Location selber gestalten. AWT, Swing, JavaFX & SWT 4
G 2. JFrame Location setzen AWT, Swing, JavaFX & SWT 6
MasterEvil Drag n Drop -Transferhandler . get Drop Location ? AWT, Swing, JavaFX & SWT 2
megachucky JInternalFrame Größe und Location nicht einstellbar AWT, Swing, JavaFX & SWT 8
F Swing Adapt Row Height funktioniert nicht richtig :( AWT, Swing, JavaFX & SWT 7
S JavaFX MenuItem in hoher (height größer) MenuBar vertikal zentrieren AWT, Swing, JavaFX & SWT 4
B Swing Wie Witdh und Height eines GuiElements bekommen AWT, Swing, JavaFX & SWT 5
A AWT Width und height bei Vollbild AWT, Swing, JavaFX & SWT 2
N AWT FontMetrics height AWT, Swing, JavaFX & SWT 5
L JFrame/Content Pane height Problem AWT, Swing, JavaFX & SWT 4
J Swing Verständnis-Problem repaint(int x,int y,int width,int height) AWT, Swing, JavaFX & SWT 3
M width und height bei JDesktopPane AWT, Swing, JavaFX & SWT 3
K Problem mit Image-Witdh() und Height() AWT, Swing, JavaFX & SWT 8
G Die ganze Pane width nutzen AWT, Swing, JavaFX & SWT 1
G JavaFX Width von Nodes einer HBox an Tab width anpassen AWT, Swing, JavaFX & SWT 3
D JTable width automatisch anpassen AWT, Swing, JavaFX & SWT 4
S Swing JTable Column Width adjustment AWT, Swing, JavaFX & SWT 3
D JFreeChart Breite (width) ändern AWT, Swing, JavaFX & SWT 6
K JTree width der Treenodes auf 100% AWT, Swing, JavaFX & SWT 6
hdi Swing JTable: SortKeys und Header Column Width AWT, Swing, JavaFX & SWT 5
Dragonfire width of JPopupMenu StyleBug AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben