Hintergrundbild beim Vergrössern anpassen

MScalli

Erfahrenes Mitglied
Hi Leutz.
habe im Forum ein kleines Programm gefunden bei dem ich ein Hintergrundbild einfügen kann. Ich würde das gerne(so ähnlic) in meinem Programm machen.
aber zuerst will ich sicher sein das ich das auch verwenden kann, denn...

wenn ich das JDesktopPane vergrössere(grösser ziehe) bleibt das bild in seiner aufgerufenen grösse.
Ist es möglich das bild beim grösser/kleiner ziehen an das JDesktopPane anzupassen?
d.h das Bild soll immer so gross sein wie der Desktop!!

Hier der Code aus dem Forum(von Billie)
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("C:\\Dokumente und Einstellungen\\All Users\\Dokumente\\Eigene Bilder\\Beispielbilder\\Sonnenuntergang.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);
    }
}
 
Du könntetst doch entweder die Paint-Methode überschreiben, dass bei jedem neuzeichnen der Hintergrund mit der aktuellen Fenstergröße gesetzt wird.
 
Also mit Bildern Zeichnen/neu Zeichnen hab ichs net so ;)
du meinst so in der richtung

im DesktopPane paint() überschreiben!!

Code:
        desktop = new JDesktopPane() {
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.drawImage(icon.getImage(), 0, 0, null);
            }
	   @Override
	   public void paint( Graphics g )
	   {
		System.out.println(getWidth());
		System.out.println(getHeight());

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

so bekomme ich beim vergrössern/verkleinern zwar die neu grösse aber ich zeichne gleube ich auch gleich wieder über die JInternalFrames(soweit ich das sehe)
Ausserdem weiss ich nicht wie ich die Fenstergrösse neu setzte
 
Zuletzt bearbeitet:
Mich würde interessieren wie ich das Image zentriert ins JDesktopPane bekomme!

@ MScalli:
Leider fällt mir so zu deinem Problem keine Lösung ein! Leg doch hinter dem JDesktopPane ein JLabel oder JFrame und setze das Image ins BorderLayout.CENTER. Schreibe eine Methode die sich dem übergeordnetem Panel (in deinem Fall das JDesktopPane) anpasst. Dimension auslesen und bild neuzeichnen.
Ich wünsche dir viel Glück!
 
Mich würde interessieren wie ich das Image zentriert ins JDesktopPane bekomme!
Gehört in einen neues Thema

Leider fällt mir so zu deinem Problem keine Lösung ein! Leg doch hinter dem JDesktopPane ein JLabel oder JFrame und setze das Image ins BorderLayout.CENTER. Schreibe eine Methode die sich dem übergeordnetem Panel (in deinem Fall das JDesktopPane) anpasst. Dimension auslesen und bild neuzeichnen.
Ich wünsche dir viel Glück!

Wozu das ganze? Der JDesktopPane hat doch getter und setter für die Größe.
 
Hallo,

versuch es mal so
Code:
g.drawImage(icon.getImage(), 0, 0, getSize().width, getSize().height, null);

MFG

zEriX
 
@ matze from hwl
dann drehs doch mal um

wie meinst du das
ich hab schon versucht nur paint() aufzurufen.. also ohne paint component,
so wirds aber genau so wie davor.. die JInternalFrames werden dann nicht gezeichnet.


ich glaub ich teh gerade wieder bisschen auf dem schlauch ^^
wie man in meiner history sehen kann habe ich öfter probleme beim zeichnen :(

aber danke das ihr versucht mir zu helfen.
 
Die Antwort von zerix funktioniert!
Ich hab es vor 5minuten ausprobiert und das Ergebnis überzeugt.

@ MScalli
Bedanke dich bei zerix, er hat die Antwort auf deine Frage.
 
nicht ganz..
aber schon mal danke zerix ;)
aber bei mir werden die JInternalFrames jetzt nicht mehr gezeichnet!!
jetzt hab ich zwar ein hintergrundbild das super geht aber meine JInternalFrames sind dahinter so wie es aussieht.
 
Zurück