Hi,
ich steht zurzeit vor dem folgenden Problem:
Ich habe einen Desktop (jDesktopPane) und kann darauf nun einige JInternalFrames platzieren. Diese Frames kann ich in Höhe und Breite beliebig verändert (bevorzugt bei einen Fenstertypen aber breite > höhe, bei anderen höhe > breite). Nun habe ich schon Funktionen um Sie "cascadiert" anzuzeigen und untereinander.
Code zu cascade:
Code zu untereinander:
Jetzt will ich es schaffen, dass die Fenster noch in einer Art Grid angezeigt werden können, also ein Raster mit einer bestimmten Anzahl an Frames in der Breite und in der Höhe, sodass schließlich quasi der ganze Desktop ausgefüllt ist.
Mein Ansatz war der:
Aber er stimmt nochnicht ganz. Denn in der ersten "Zeile" ist das letzte Fenster außerhalb des Desktops (es fängt bei dem letzten x des Desktops an). Und außerdem wird der Desktop nicht komplett
ausgefüllt.
Wie kann ich das bewerkstelligen?
Es müsste eben zB so aufgeteilt werden:
Bei 6 Fenstern: 3 Fenster breit + 2 Fenster hoch oder umgekehrt
Bei 20 Fenstern: 5 Fenster breit + 4 Fenster hoch oder umgekehrt
Bei ungeraden Zahlen an Fenstern müsste es logischerweise in der letzten Zeile ein (bzw. mehrere) leere Felder geben.
Hat jemand schonmal einen solchen Code geschrieben bzw. weiß jemand, wie man das Mathematisch macht?
Gruß
manu
ich steht zurzeit vor dem folgenden Problem:
Ich habe einen Desktop (jDesktopPane) und kann darauf nun einige JInternalFrames platzieren. Diese Frames kann ich in Höhe und Breite beliebig verändert (bevorzugt bei einen Fenstertypen aber breite > höhe, bei anderen höhe > breite). Nun habe ich schon Funktionen um Sie "cascadiert" anzuzeigen und untereinander.
Code zu cascade:
Java:
public void cascadeFrames() {
int x = 0;
int y = 0;
JInternalFrame allFrames[] = desktop.getAllFrames();
setNormalSize();
int frameHeight = (desktop.getBounds().height - 5) - allFrames.length * 20;
int frameWidth = (desktop.getBounds().width - 5) - allFrames.length * 20;
for (int i = allFrames.length - 1; i >= 0; i--) {
allFrames[i].setSize(frameWidth,frameHeight);
allFrames[i].setLocation(x,y);
x = x + 20;
y = y + 20;
}
if(allFrames.length*20 > desktop.getBounds().width){
JOptionPane.showMessageDialog(null, "Achtung! Das Fenster ist zu klein, um die Funktion 'cascade' anzuzeigen! Bitte vergrößern Sie das Fenster!", "Fenster zu klein", JOptionPane.WARNING_MESSAGE);
}
}
Java:
public void tileFrames() {
java.awt.Component allFrames[] = desktop.getAllFrames();
setNormalSize();
int frameHeight = desktop.getBounds().height/ allFrames.length;
int y = 0;
for (int i = 0; i < allFrames.length; i++) {
allFrames[i].setSize(desktop.getBounds().width, frameHeight);
allFrames[i].setLocation(0, y);
y = y + frameHeight;
}
}
Jetzt will ich es schaffen, dass die Fenster noch in einer Art Grid angezeigt werden können, also ein Raster mit einer bestimmten Anzahl an Frames in der Breite und in der Höhe, sodass schließlich quasi der ganze Desktop ausgefüllt ist.
Mein Ansatz war der:
Java:
public void gridFrames() {
java.awt.Component allFrames[] = desktop.getAllFrames();
setNormalSize();
int frameHeight = desktop.getBounds().height/ (allFrames.length/2);
int frameWidth = desktop.getBounds().width/ 4;
int y = 0;
int x = 0;
int q = 0;
for (int i = 0; i < allFrames.length; i++) {
allFrames[i].setSize(frameWidth, frameHeight);
allFrames[i].setLocation(x, y);
if(q>=4){ x=0; q=0; }else{ x = x + frameWidth; }
if(x==0){y=y+frameHeight;}else{ y = y; }
q++;
}
}
ausgefüllt.
Wie kann ich das bewerkstelligen?
Es müsste eben zB so aufgeteilt werden:
Bei 6 Fenstern: 3 Fenster breit + 2 Fenster hoch oder umgekehrt
Bei 20 Fenstern: 5 Fenster breit + 4 Fenster hoch oder umgekehrt
Bei ungeraden Zahlen an Fenstern müsste es logischerweise in der letzten Zeile ein (bzw. mehrere) leere Felder geben.
Hat jemand schonmal einen solchen Code geschrieben bzw. weiß jemand, wie man das Mathematisch macht?
Gruß
manu