2014-05-09 2 views
0

다음 코드는 Gui 클래스의 내부 프레임 수신기를 보여줍니다. 내부 프레임 청취자는 save (JMenuItem)를 enable 또는 disabled로 설정해야하지만 아무것도하지 않습니다. 문제가 어디 있는지 모르겠습니다. 나는 몇 가지 시도했지만 아무것도 작동하지 않습니다.내부 프레임 수신기가 작동하지 않습니다.

public class Gui implements InternalFrameListener, ActionListener{ 

MyInternalFrame frame; 
JMenuItem save; 

public Gui(JDesktopPane desktop, final JMenuItem save) { 
    // TODO Auto-generated constructor stub 

    frame = new MyInternalFrame(title, img); 
    this.save = save; 
    frame.setVisible(true); 
    desktop.add(frame); 
    try { 
      frame.setSelected(true); 
    } catch (java.beans.PropertyVetoException e) { 

    } 
    frame.addInternalFrameListener(this); 

     // options(name, desktop); 

} 

class MyInternalFrame extends JInternalFrame { 

    static final int xPosition = 30, yPosition = 30; 
    public MyInternalFrame(String title, ImagePlus img) { 
     super(title, true,true, true, true); 
     setSize(img.getHeight(), img.getWidth()); 

     // Set the window's location. 
     setLocation(xPosition * openFrameCount, yPosition * openFrameCount); 
    } 
} 

public void actionPerformed(ActionEvent e){ 
    frame.addInternalFrameListener(this); 
    System.out.println("beingg called"); 
} 



@Override 
public void internalFrameActivated(InternalFrameEvent arg0) { 
    // TODO Auto-generated method stub 

    save.setEnabled(true); 
} 

@Override 
public void internalFrameClosed(InternalFrameEvent arg0) { 
    // TODO Auto-generated method stub 

    save.setEnabled(false); 
} 

@Override 
public void internalFrameClosing(InternalFrameEvent arg0) { 
    // TODO Auto-generated method stub 
    save.setEnabled(false); 

} 

@Override 
public void internalFrameDeactivated(InternalFrameEvent arg0) { 
    // TODO Auto-generated method stub 
    save.setEnabled(false); 

} 

@Override 
public void internalFrameDeiconified(InternalFrameEvent arg0) { 
    // TODO Auto-generated method stub 

    save.setEnabled(true); 
} 

@Override 
public void internalFrameIconified(InternalFrameEvent arg0) { 
    // TODO Auto-generated method stub 

    save.setEnabled(false); 

} 

@Override 
public void internalFrameOpened(InternalFrameEvent arg0) { 
    // TODO Auto-generated method stub 
    save.setEnabled(true); 

} 

} 
+0

이렇게하면 저장이 할당되지 않으므로 NullPointerException이 발생합니다. – Soana

+0

MyInternalFrame 클래스는 어디에서 볼 수 있습니까? –

+0

가능한 경우 MyInternalFrame 클래스의 소스 코드를 게시하십시오. 또한 super (imp)는 컴파일 시간 오류를 나타내며 imp가 무엇인지 정의하지 않았습니다. –

답변

1

MCVE이 일반적으로 작동하는지 나타내는 : 여기

코드이다. 내 생각 엔 save 메뉴 항목의 잘못된 인스턴스를 사용하고있는 것 같습니다. 의심, 당신의 방법에 디버그 출력

@Override 
    public void internalFrameIconified(InternalFrameEvent arg0) 
    { 
     System.out.println("Disabling "+save); 
     save.setEnabled(false); 
    } 

를 추가합니다.

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

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; 
import javax.swing.event.InternalFrameEvent; 
import javax.swing.event.InternalFrameListener; 

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

    private static void createAndShowGUI() 
    { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(new GridLayout(1, 1)); 

     JMenuBar menubar = new JMenuBar(); 
     JMenu menu = new JMenu("Menu"); 
     menubar.add(menu); 
     JMenuItem menuItem = new JMenuItem("Save"); 
     menu.add(menuItem); 
     frame.setJMenuBar(menubar); 
     JDesktopPane d = new JDesktopPane(); 
     Gui gui = new Gui(d, menuItem); 

     frame.getContentPane().add(d); 
     frame.setSize(500,500); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 

class Gui implements InternalFrameListener, ActionListener 
{ 

    MyInternalFrame frame; 
    JMenuItem save; 

    public Gui(JDesktopPane desktop, final JMenuItem save) 
    { 
     frame = new MyInternalFrame("Title"); 
     this.save = save; 
     frame.setVisible(true); 
     desktop.add(frame); 
     try 
     { 
      frame.setSelected(true); 
     } 
     catch (java.beans.PropertyVetoException e) 
     { 

     } 
     frame.addInternalFrameListener(this); 
    } 

    class MyInternalFrame extends JInternalFrame 
    { 

     static final int xPosition = 30, yPosition = 30; 

     public MyInternalFrame(String title) 
     { 
      super(title, true, true, true, true); 
      setSize(200,100); 
      setLocation(50,50); 
     } 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     frame.addInternalFrameListener(this); 
     System.out.println("beingg called"); 
    } 

    @Override 
    public void internalFrameActivated(InternalFrameEvent arg0) 
    { 
     save.setEnabled(true); 
    } 

    @Override 
    public void internalFrameClosed(InternalFrameEvent arg0) 
    { 
     save.setEnabled(false); 
    } 

    @Override 
    public void internalFrameClosing(InternalFrameEvent arg0) 
    { 
     save.setEnabled(false); 
    } 

    @Override 
    public void internalFrameDeactivated(InternalFrameEvent arg0) 
    { 
     save.setEnabled(false); 
    } 

    @Override 
    public void internalFrameDeiconified(InternalFrameEvent arg0) 
    { 
     save.setEnabled(true); 
    } 

    @Override 
    public void internalFrameIconified(InternalFrameEvent arg0) 
    { 
     save.setEnabled(false); 
    } 

    @Override 
    public void internalFrameOpened(InternalFrameEvent arg0) 
    { 
     save.setEnabled(true); 
    } 
}