2013-08-17 7 views
0

Я создаю более одного JInternalFrame в JDesktopPane. Каждый кадр имеет одну кнопку. Я хочу закрыть конкретный кадр, на который нажата кнопка.Закрыть конкретный JInternalFrame при нажатии кнопки

internalFrame = new JInternalFrame("Internal Frame", true, true, true, true); 

    internalFrame.setSize(300, 300); 
    internalFrame.setLocation(xPosition * openFrameCount, yPosition 
      * openFrameCount); 

    internalFrame.setContentPane(createContentPane()); 
    internalFrame.setJMenuBar(createPopJMenuBar()); 

    internalFrame.setVisible(true); 

    JButton close = new JButton("Close Me!"); 
    close.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
       try { 
        internalFrame.setClosed(true); 
       } catch (PropertyVetoException e1) { 
        e1.printStackTrace(); 
       } 
     } 
    }); 
    internalFrame.add(close); 
    jdpDesktop.add(internalFrame); 

Используя приведенный выше код, я могу закрыть последний созданный кадр. Другие рамки не закрыты.

+0

Я хочу закрыть конкретный JFrame, на который нажата кнопка. ---> мой вопрос JFrame или JInternalFrame, может быть совсем другим – mKorbel

+0

JInternalFrame только – Raja

ответ

1

Похоже, что у вас есть internalFrame как поле прилагаемого класса. Затем он перезаписывается каждый раз, когда вы создаете новый. Используйте локальную переменную вместо:

// Notice "final" 
final JInternalFrame internalFrame = new JInternalFrame("Internal Frame", true, true, true, true); 
... 

Это гарантирует, что internalFrame в каждом слушателе действий относится к одному создано несколько строк выше, не до последнего созданного кадра.

+0

отличный человек..и работает отлично. Могу ли я сделать то же самое, используя меню в каждом jframe? – Raja

+1

@Raja Я не знаю, что вы имеете в виду с меню :-) Вполне возможно, что у вас такая же ошибка. Если вы привязываете слушателя к меню, созданному локально, но назначаете его в поле, это кажется вероятным. Как правило, рекомендуется использовать локальные переменные, если вам не нужно хранить их в поле. – kiheru

Смежные вопросы