Tag Leute,
erstmal Hallo zusammen, denn ich bin neu hier, also erwartet nicht gleich von mir dass ich alles richtig mache und sofort verstehe. ;-)
Gegoogled und in den FAQs hab ich auch schon gschaut, und weil ich nix wirklich passendes gefunden habe, wend ich mich einfach mal an euch.
Also, zur Frage:
Und zwar programmiere ich zzt. an einem Projekt das als Main einen Desktop bietet, der eben verschiedene Unterfenster enthält, in denen gearbeitet werden kann. Soweit so gut.
Das hab ich soweit mit DesktopFrame (in der Mainklasse) gelöst:
... ein einfacher Desktop der sich eben der Screensize anpasst und ein halbwegs schönes Layout (mit Hintergrundbild) bietet.
Das funktioniert auch ohne Probleme. Über die Menübar kann ich dann verschiedene Unterfenster anlegen:
Code fürs Haus (gelöst mit InternalFrame):
... und hier kommt mein Problem:
Und zwar, solange ich in den Unterfenstern keine Paint-Methode habe, funktioniert alles super und ich kann sie parallel benutzen. Sobald ich allerdings in der InternalFrame Klasse eine Paint Methode implementiere (hier hab ich sie zzt. einkommentiert), was ich auch brauche um danach darin arbeiten zu können, werden die Unterfenster nicht mehr richtig angezeigt. Sie haben dann keine Taskleisten mehr und überhaupt keine Rahmen. Ich hab nur die Hintergrundfarbe des InternalFrames mitten am Desktop und kann damit nix machen. Ausserdem verschwindet das Hintergrundbild meines Desktops, wenn ich darauf klicke (passiert nur wenn ich die paint-Methode im InternalFrame implementiert habe).
Hat wer eine Ahnung wieso bzw. was ich dagegen tun kann?
Bitte um Antworten (is sehr wichtig, bin auch relativ im Zeitdruck) und freue mich natürlich auch über Verbesserungsvorschläge.
Danke im Voraus,
x. sapre_aude
erstmal Hallo zusammen, denn ich bin neu hier, also erwartet nicht gleich von mir dass ich alles richtig mache und sofort verstehe. ;-)
Gegoogled und in den FAQs hab ich auch schon gschaut, und weil ich nix wirklich passendes gefunden habe, wend ich mich einfach mal an euch.
Also, zur Frage:
Und zwar programmiere ich zzt. an einem Projekt das als Main einen Desktop bietet, der eben verschiedene Unterfenster enthält, in denen gearbeitet werden kann. Soweit so gut.
Das hab ich soweit mit DesktopFrame (in der Mainklasse) gelöst:
Code:
public Menu() {
desktop = new JDesktopPane() {
private static final long serialVersionUID = 1L;
protected void paintComponent(Graphics g) {
super.paintComponent(g);
ImageIcon logo = new ImageIcon("C:/Dokumente und Einstellungen/Thomas/Eigene Dateien/Schule/4. Klasse/PR/Projekt/Logo/Wohnraumplaner2D Logo.png");
int abstandX = ((((int)getToolkit().getScreenSize().getWidth())-500)/2)+23;
int abstandY = (((int)getToolkit().getScreenSize().getHeight())-523)/2;
g.drawImage(logo.getImage(), abstandX, abstandY, null);
}
};
desktop.setLocation(0,0);
Dimension screen = getToolkit().getScreenSize();
screen.setSize(getToolkit().getScreenSize().getWidth(),getToolkit().getScreenSize().getHeight()-23);
desktop.setPreferredSize(screen);
desktop.setBackground(Color.GRAY);
desktop.setVisible(true);
setContentPane(desktop);
setResizable(false);
setUndecorated(true);
setJMenuBar(erzeugeMenubar());
}
... ein einfacher Desktop der sich eben der Screensize anpasst und ein halbwegs schönes Layout (mit Hintergrundbild) bietet.
Das funktioniert auch ohne Probleme. Über die Menübar kann ich dann verschiedene Unterfenster anlegen:
Code:
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("Haus anlegen")){
int screenSizeX = (int)getToolkit().getScreenSize().getWidth();
int screenSizeY = (int)getToolkit().getScreenSize().getHeight();
int sizeX = (int)(screenSizeX*0.8);
int sizeY = (int)(screenSizeY*0.8);
int abstandX = (screenSizeX - sizeX) / 2;
int abstandY = (((screenSizeY-23) - sizeY) / 2);
neuesHaus(new Haus("Neues Haus",sizeX,sizeY), abstandX, abstandY);
}
if (event.getActionCommand().equals("Optionen")){
//noch nix
}
if (event.getActionCommand().equals("Beenden")){
dispose();
System.exit(0);
}
}
public void neuesHaus(JInternalFrame haus, int posX, int posY){
haus.setLocation(posX, posY);
haus.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
haus.setVisible(true);
desktop.add(haus);
}
Code fürs Haus (gelöst mit InternalFrame):
Code:
package ao;
import java.awt.Color;
//import java.awt.Graphics;
import javax.swing.JInternalFrame;
class Haus
extends JInternalFrame
{
private static final long serialVersionUID = 1L;
private int sizeX;
private int sizeY;
public Haus(String titel, int sizeX, int sizeY)
{
super(titel, true, true);
setIconifiable(true);
setMaximizable(false);
setResizable(false);
this.sizeX = sizeX;
this.sizeY = sizeY;
setSize(this.sizeX, this.sizeY);
setBackground(Color.lightGray);
// repaint();
}
// public void paint(Graphics g){
// g.setColor(Color.black);
// g.drawRect(100,100,500,500);
// g.setColor(Color.gray);
// g.fillRect(100,100,500,500);
// }
}
... und hier kommt mein Problem:
Und zwar, solange ich in den Unterfenstern keine Paint-Methode habe, funktioniert alles super und ich kann sie parallel benutzen. Sobald ich allerdings in der InternalFrame Klasse eine Paint Methode implementiere (hier hab ich sie zzt. einkommentiert), was ich auch brauche um danach darin arbeiten zu können, werden die Unterfenster nicht mehr richtig angezeigt. Sie haben dann keine Taskleisten mehr und überhaupt keine Rahmen. Ich hab nur die Hintergrundfarbe des InternalFrames mitten am Desktop und kann damit nix machen. Ausserdem verschwindet das Hintergrundbild meines Desktops, wenn ich darauf klicke (passiert nur wenn ich die paint-Methode im InternalFrame implementiert habe).
Hat wer eine Ahnung wieso bzw. was ich dagegen tun kann?
Bitte um Antworten (is sehr wichtig, bin auch relativ im Zeitdruck) und freue mich natürlich auch über Verbesserungsvorschläge.
Danke im Voraus,
x. sapre_aude