2017-03-14 16 views
0

액티브 한 JInternalFrame의 취득에 문제가 있습니다. 나는 그것에 대해 몇 가지 작업을 수행 할 것이므로 활성 ImageInternalFrame (내 클래스, 즉 JInternalFrame을 확장)을 표시해야합니다. 어떻게 해결 해야할지 모르겠지만 누군가 나를 도울 수 있습니까?Swing : 액티브하게되는 방법 JInternalFrame

public class MainFrame extends javax.swing.JFrame { 

    ArrayList <ImageInternalFrame> imageInternalFrameList = new ArrayList(); 


    private void openMenuItemActionPerformed(java.awt.event.ActionEvent evt) {            

     JFileChooser chooser = new JFileChooser(); 
     chooser.showOpenDialog(null); 
     File f = chooser.getSelectedFile(); 
     String filePath = f.getPath(); 

     BufferedImage bufferedImage; 
     ImageInternalFrame imageInternalFrame; 

     String mimetype= new MimetypesFileTypeMap().getContentType(f); 
     String type = mimetype.split("/")[0]; 
     if(type.equals("image")){ 
      bufferedImage = null; 
      try { 
       bufferedImage = ImageIO.read(new File(filePath)); 
      } catch (IOException ex) { 
       Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex); 
      } 

      imageInternalFrame = new ImageInternalFrame(filePath); 

      imageInternalFrame.setSize(bufferedImage.getWidth(), bufferedImage.getHeight()); 
      imageInternalFrame.setVisible(true); 
      imageInternalFrame.setLocation(imageInternalFrameList.size() * 25 , imageInternalFrameList.size() * 25); 
      add(imageInternalFrame); 
      imageInternalFrameList.add(imageInternalFrame); 
     }   
     else{ 
      JOptionPane.showMessageDialog(null, "It's NOT an image"); 
     }} 

public class ImageInternalFrame extends javax.swing.JInternalFrame { 

    public ImageInternalFrame(String imagePath) { 
     initComponents(); 

     setImage(imagePath); 
    } 

    public void setImage(String imagePath){ 
     imageLabel.setIcon(new ImageIcon(imagePath)); 
     imageLabel.paintImmediately(imageLabel.getVisibleRect()); 
    } 
} 
+0

코드 스 니펫, HTML/XML 또는 입력/출력과 같은 구조화 된 문서의 코드 형식을 사용하십시오. 이렇게하려면 텍스트를 선택하고 메시지 게시/편집 양식 상단의 '{}'버튼을 클릭하십시오. –

답변

2

당신은 당신의 JDesktop 클래스의 getSelectedFrame() 방법을 사용할 수 있습니다 :

여기 내 코드입니다.

imageLabel.setIcon(new ImageIcon(imagePath)); 
imageLabel.paintImmediately(imageLabel.getVisibleRect()); 

paintImmeditately를 사용하지 마십시오. 스윙은 아이콘을 변경할 때 레이블의 다시 그리기를 자동으로 예약합니다.