2014-03-25 3 views
0

У меня есть проект MDI. Я добавляю клиента JPanel в JInternalFrame. У моего клиента JPanel есть общедоступный метод изменения цвета фона компонента. Когда нажата кнопка на JFrame, я хочу, чтобы она меняла ярлык или текст на моем клиенте JPanel для всех внутренних фреймов. Как я могу назвать метод? Заранее спасибоВызовите метод на моем клиенте JPanel для изменения ярлыка для всех JInternalFrames в JFrame

Следующий кодом является действием для кнопки на JFrame

private void categoryAction(ActionEvent e){ 
    try{ 
     JButton b=(JButton)e.getSource(); 
     Color c=b.getBackground(); 
     JInternalFrame[] allframes = desktop.getAllFrames(); 
     int count = allframes.length; 
     for (int i=0; i<allframes.length-1; i++){ 
      //call the method on the PDFJPanel 
     } 

    } 
    catch(Exception err){ 
     Utility.DisplayErrorMsg(err.toString()); 

    } 

Следующий код добавьте внутреннюю рамку на рабочий стол

private void AddNote(File file){   
     JInternalFrame internalFrame = new  JInternalFrame("PDFAnnotation" 
       + file.getName(), true, true, true, true);  
     internalFrame.setBounds(0, 0, 600, 100); 
     desktop.add(internalFrame);  


     PDFJPanel p=new PDFJPanel(file);  
     internalFrame.add(p, BorderLayout.CENTER); 
     internalFrame.setVisible(true); 
try { 
      internalFrame.setSelected(true); 
     } 
     catch (java.beans.PropertyVetoException e) {} 
     this.add(desktop, BorderLayout.CENTER); 

     //resize the internal frame as full screen 
     Dimension size = desktop.getSize(); 
     int w = size.width ; 
     int h = size.height ; 
     int x=0; 
     int y=0; 
     desktop.getDesktopManager().resizeFrame(internalFrame, x, y, w, h); 
    } 

Существует метод на моем клиенте JPanel

Public void setDefaultColor(Color c){ 
     //change the label and textbox color 
} 

ответ

2

Вы можете использовать JDesktopPane.getSelectedFrame, который возвращает curr активного кадра. Вы можете получить PDFJPanel из менеджера компоновки, то есть используя BorderLayout.getLayoutComponent(). Или проще и чист, вы можете продлить JInternalFrame, то есть:

class PDFFrame extends JInternalFrame { 
    private PDFJPanel panel; 

    public PDFFrame(File file) { 
     panel = new PDFJPanel(file); 
     add(panel, BorderLayout.CENTER); 
    } 

    public void setDefaultColor(Color c){ 
     panel.setDefaultColor(); 
    } 
} 

Затем к нему доступ:

JDesktopPane desktop = ...; 

PDFFrame frame = (PDFFrame) desktop.getSelectedFrame(); 
frame.setDefaultColor(Color.BLUE); 
+0

мне нужно изменить весь кадр, а не только в настоящее время активного кадра. – user819774

+0

@ user819774 см. [JDesktopPane.getAllFrames()] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JDesktopPane.html#getAllFrames%28%29) – tenorsax

+0

Я использовал getAllFrames () в моем коде, чтобы получить весь фрейм, но я не знаю, как получить PDFJPanel для всего внутреннего фрейма. Вы мне покажете? Благодарю. – user819774