2012-12-11 3 views
7

java netbeans를 사용하여 MDI (다중 문서 인터페이스)에서 jdesktoppane 배경 이미지를 변경하는 방법은 무엇입니까? 나는 java MDI에 jdesktoppane을 추가 했으므로 이제 java MDI에서 사용하는 jdesktoppane의 기본 배경 이미지를 변경하고 싶다. 쉬운 방법?jdesktoppane 기본 배경 이미지를 변경하는 방법은 무엇입니까?

첨부 된 스냅 샷 링크를 확인하면 내가 원하는 것을 더 잘 이해할 수 있습니다. MadProgrammers 주석에

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

+2

아래의 "이전"방법은 새로운'JDesktopPane'를 확장하고 도움을'paintComponent' – MadProgrammer

+0

감사를 오버라이드 (override) 할 것이다로서 당신은 같은 소스 코드로 나에게 좀 더 도움을 줄 수 있습니다 이 coz 나는 이것을 사용하여 새롭다. –

답변

12

+1.

JDesktopPanepaintComponent(..)을 무시하고 drawImage(Image img,int x,int y,ImageObserver io)으로 전화하여 이미지를 그립니다.

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

중대한 도움 및 저를 위해 그것의 잘 작동을위한 감사 ... –

0

내가 별도의 그것을 해결 :

말라가 페인트 체인을 존중하는 것을 잊지하고 여기에

오버라이드 (override) paintComponent(..) 방법으로 첫 번째 통화로 super.paintComponent(g)를 호출하는 예입니다 함수를 사용하여 데스크탑 객체를 만듭니다.

코드

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

받아 들인 응답에 비교해 새로운 아무것도, 거기있다 ;-) – kleopatra

+0

아래와 같이 새로운 품목 : - - 그것 JDesktop 객체를 만들 때 디렉토리를 호출하거나 유틸리티에 추가 할 수있는 함수를 재사용 할 수 있습니다. - 이미지 디렉토리의 로컬 이미지 파일에서이 기능을 사용할 수 있습니다. –

+0

이미지 이름/크기 조정 매개 변수를 다시 사용하고 하드 코딩하면 자체적으로 모순이됩니다. – kleopatra