2012-12-11 9 views
7

Wie jdesktoppane Hintergrundbild in MDI (Multiple Documents Interface) mit Java Netbeans ändern? Bedeutet, dass ich das jdesktoppan zu java MDI hinzugefügt habe, also will ich jetzt das Standardhintergrundbild dieses jdesktoppanes, das ich in Java MDI verwende, ändern. Jeder einfache Weg?Wie ändert man das Standardhintergrundbild von jdesktopane?

Überprüfen Sie den angehängten Snapshot-Link möglicherweise werden Sie besser verstehen, meine Frage, was ich will.

http://i50.tinypic.com/iml1e9.jpg

+2

Die „alte“ Art und Weise würden Sie einen neuen 'JDesktopPane' erweitern und die' paintComponent' – MadProgrammer

+0

Dank für die Hilfe überschreiben und können Sie mir etwas mehr Hilfe wie Quellcode geben für Ich bin neu mit dieser Verwendung .. –

Antwort

12

+1 bis MadProgrammers Kommentar.

Überschreiben Sie einfach JDesktopPanepaintComponent(..) und rufen Sie drawImage(Image img,int x,int y,ImageObserver io), um ein Bild zu zeichnen.

Vergessen Sie nicht, die Lackkette und rufen super.paintComponent(g) als erster Aufruf in überschriebene paintComponent(..) Methode

Hier zu ehren ein Beispiel:

enter image description here

import java.awt.*; 
import java.awt.event.*; 
import java.awt.image.BufferedImage; 
import java.net.URL; 
import javax.imageio.ImageIO; 
import javax.swing.JDesktopPane; 
import javax.swing.JFrame; 
import javax.swing.JInternalFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.SwingUtilities; 

public class JInternalFrameDemo { 

    private JDesktopPane jdpDesktop; 
    private static int openFrameCount = 0; 
    private BufferedImage img; 

    public JInternalFrameDemo() { 
     JFrame frame = new JFrame("JInternalFrame Usage Demo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     try { 
      img = ImageIO.read(new URL("http://images1.wikia.nocookie.net/__cb20120817224359/villains/images/6/6a/Nine-Tailed_Fox_(Naruto).jpg")); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 

     // A specialized layered pane to be used with JInternalFrames 
     jdpDesktop = new JDesktopPane() { 
      @Override 
      protected void paintComponent(Graphics grphcs) { 
       super.paintComponent(grphcs); 
       grphcs.drawImage(img, 0, 0, null); 
      } 

      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(img.getWidth(), img.getHeight()); 
      } 
     }; 



     createFrame(); // Create first window 

     frame.setContentPane(jdpDesktop); 

     frame.setJMenuBar(createMenuBar()); 

     // Make dragging faster by setting drag mode to Outline 
     jdpDesktop.putClientProperty("JDesktopPane.dragMode", "outline"); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

    protected JMenuBar createMenuBar() { 
     JMenuBar menuBar = new JMenuBar(); 
     JMenu menu = new JMenu("Frame"); 
     menu.setMnemonic(KeyEvent.VK_N); 
     JMenuItem menuItem = new JMenuItem("New IFrame"); 
     menuItem.setMnemonic(KeyEvent.VK_N); 
     menuItem.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       createFrame(); 
      } 
     }); 
     menu.add(menuItem); 
     menuBar.add(menu); 
     return menuBar; 
    } 

    protected void createFrame() { 
     MyInternalFrame frame = new MyInternalFrame(); 
     frame.setVisible(true); 
     // Every JInternalFrame must be added to content pane using JDesktopPane 
     jdpDesktop.add(frame); 
     try { 
      frame.setSelected(true); 
     } catch (java.beans.PropertyVetoException e) { 
     } 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new JInternalFrameDemo(); 
      } 
     }); 
    } 

    class MyInternalFrame extends JInternalFrame { 

     static final int xPosition = 30, yPosition = 30; 

     public MyInternalFrame() { 
      super("IFrame #" + (++openFrameCount), true, // resizable 
        true, // closable 
        true, // maximizable 
        true);// iconifiable 
      setSize(300, 300); 
      // Set the window's location. 
      setLocation(xPosition * openFrameCount, yPosition 
        * openFrameCount); 
     } 
    } 
} 
+1

Danke für die große Hilfe und es funktioniert gut für mich .... –

0

ich es in einem separaten lösen Funktion zum Erstellen eines Desktop-Objekts.

-Code wie unten

private JDesktopPane intializeDesktop(JDesktopPane mydesktop,String imagePath,int scalx,int scaly) { 

     // A specialized layered pane to be used with JInternalFrames 
     mydesktop = new JDesktopPane() { 
      ImageIcon icon = new ImageIcon(imagePath); 
      Image image = icon.getImage(); 

      Image newimage = image.getScaledInstance(scalx, scaly, Image.SCALE_SMOOTH); 

      @Override 
      protected void paintComponent(Graphics g) { 
       super.paintComponent(g); 
       g.drawImage(newimage, 0, 0, this); 
      } 
     }; 

     return mydesktop; 
    } 
+0

nichts neues im Vergleich zu der angenommenen Antwort, gibt es ;-) – kleopatra

+0

die neuen Elemente wie folgt: - -Das Funktion wiederverwendbar können Sie Verzeichnis aufrufen, wenn Sie JDesktop-Objekt erstellen, oder Sie können es in Dienstprogramm hinzufügen -Die Funktion arbeiten auf lokale Image-Datei im Verzeichnis images –

+0

wieder zu verwenden und hart-codierte Bild Name/Skalierung Parameter ist ein Widerspruch in sich ;-) – kleopatra

Verwandte Themen