Probleme mit DesktopPane

Solan

Grünschnabel
Probleme mit JInteralFrames & JDesktopPane

Ich bin leider noch ein Anfänger was awt und swing angeht und habe da einige Probleme mit dem DesktopPane.

1. Möchte ich ein Hintergrundbild enbinden, was ich auch geschafft habe. Nur wird dieses Bild leider nach und anch gelöscht, wenn man die InternelFrames darüber schiebt. Das möchte ich allerdings nicht.

2. Funktioniert es leider nicht, eine Menubar einzubauen. Woran das liegt weiß ich nicht...

3. Gibt es eine Möglichkeit, um nach einer bestimmten Zeit in der nichts passiert ist eine Klasse aufzurufen? Also so eine Art Bildschirmschoner?
Code:
import java.awt.*;
import javax.swing.*;

public class DesktopFrame extends JFrame {
	
	public JDesktopPane desk;
	
	public DesktopFrame() {
		super("bla");
		Container content = getContentPane();
		content.setBackground(Color.white);
		this.desk = new JDesktopPane();	
		this.desk.setDesktopManager(new DefaultDesktopManager());
		setContentPane(desk);
		this.desk.setBackground(Color.WHITE);
	}
	
	public void addChild(JInternalFrame child, int x, int y)
	{
		child.setLocation(x, y);
		child.setSize(200, 150);
		child.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
		desk.add(child);
		child.setVisible(true);
		
	}
	
	public void paint(Graphics g) {
		Image img;
		Dimension x = desk.getSize();
		img = getToolkit().getImage("images/background.jpg");
		g.drawImage(img,1,1, desk.getSize().width, desk.getSize().height, this);
	}

}

public class hauptklasse extends Window {

	public static DesktopFrame desktop = new DesktopFrame();
	public static ChildFrame child1 = new ChildFrame("Child 1");

	public hauptklasse()
	{
		super(new Frame());
		setBackground(Color.black);
	}

	public static void main(String[] args) {
		final conventionspiele wnd = new conventionspiele();	
		
		desktop.setLocation(new Point(1, 1));
		desktop.setSize(wnd.getToolkit().getScreenSize());
		desktop.setVisible(true);
		desktop.show();
		child1.setVisible(true);
		desktop.addChild(child1, 20, 20);
		child1.setSize(200, 300);
		child1.setVisible(true);
	}

Wäre über Hilfe sehr dankbar!
 
Zuletzt bearbeitet:
Habe jetzt mal versucht anstatt einem DesktopPane einen JFrame zu nehmen, bei dem ich problemlos JMenuBar adden kann, nur funktionieren dann die JInternalFrames mehr und das Hintergrundbild wird gar nicht angezeigt.

Kann mir jemand bei der Lösung meines Problems helfen. Grob geschildert möchte ich erstmal folgendes erreichen:

1. Hauptfenster mit Menubar und Hintergrundbild, dass nicht durch verschieben von internen Frames übermalt wird.
2. In dem Hauptfenster möchte ich beliebig viele Interne Fenster aufpoppen lassen.

Oder geht das ganze nicht ?
 
Hallo!

Schau mal hier:
http://www.tutorials.de/tutorials200148.html

3. Gibt es eine Möglichkeit, um nach einer bestimmten Zeit in der nichts passiert ist eine Klasse aufzurufen? Also so eine Art Bildschirmschoner?
Denke, dass du das schon selbst machen musst. "Der/Die" einzige die so wissen könnte ob deine Application gerade keine Benutzereingaben erhält wäre die EventQueue ;-).
Du musst eben selbst irgendwelche timestamps setzen (welche Internaktion signalisieren) und diese dann peridoisch prüfen ( ist timestamp älter als 300 sek?).
Die andere Möglichkeit wäre beispielsweise diesen Überprüfungscode in einer eigenen EventQueue unterzubringen... aber das wäre dann doch schon ein wenig heftig :)
Aber ich denke die Bildschrimschoner des Betriebssystems reichen dafür schon aus. :)

Gruß Tom
 
*argl* Alles "umsonst"... aber man sollte evtl. davor doch selbst die Suchfunktion benutzen. Auch wenn man erwarten könnte, dass der jenige welcher das Selbige schon probiert hat.

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


class BackgroundFrame extends JFrame implements ActionListener {


    JDesktopPane desktop;
    ImageIcon icon;


    BackgroundFrame() {

        icon = new ImageIcon("tompanel.jpg");

        desktop = new JDesktopPane() {

            protected void paintComponent(Graphics g) {

                super.paintComponent(g);
                g.drawImage(icon.getImage(), 0, 0, null);
            }
        };

        desktop.setOpaque(false);
        desktop.setPreferredSize(new Dimension(800, 534));
        setContentPane(desktop);
        setJMenuBar(createMenuBar());
    }


    public static void main(String[] args) {

        BackgroundFrame frame = new BackgroundFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }


    protected void createFrame() {
        MyInternalFrame frame = new MyInternalFrame();
        frame.setVisible(true); //necessary as of 1.3
        desktop.add(frame);
        try {
            frame.setSelected(true);
        } catch (java.beans.PropertyVetoException e) {}
    }


    protected JMenuBar createMenuBar() {
        JMenuBar menuBar = new JMenuBar();

        //Set up the lone menu.
        JMenu menu = new JMenu("Document");
        menu.setMnemonic(KeyEvent.VK_D);
        menuBar.add(menu);

        //Set up the first menu item.
        JMenuItem menuItem = new JMenuItem("New");
        menuItem.setMnemonic(KeyEvent.VK_N);
        menuItem.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_N, ActionEvent.ALT_MASK));
        menuItem.setActionCommand("new");
        menuItem.addActionListener(this);
        menu.add(menuItem);

        //Set up the second menu item.
        menuItem = new JMenuItem("Quit");
        menuItem.setMnemonic(KeyEvent.VK_Q);
        menuItem.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_Q, ActionEvent.ALT_MASK));
        menuItem.setActionCommand("quit");
        menuItem.addActionListener(this);
        menu.add(menuItem);

        return menuBar;
    }


    public void actionPerformed(ActionEvent e) {
        if ("new".equals(e.getActionCommand())) { //new
            createFrame();
        } else { //quit
            quit();
        }
    }


    protected void quit() {
        System.exit(0);
    }
}
 
Jo thx :)
Das hat mir geholfen und nu ist es so, wie ich es mir vorgestellt habe ...

das mit dem Bildschirmschoner werde ich wohl über nen neuen Thread oder so machen... muss ich mal schauen, ob das klappt :)
 
Zurück