在我的客户JPanel上调用方法,以更改JFrame中所有JInternalFrame的标签

时间:2014-03-25 20:22:08

标签: java swing jinternalframe

我有MDI项目。我在JInternalFrame中添加了客户JPanel。我的客户JPanel有一个公共方法来更改某些组件背景颜色。单击JFrame上的按钮时,我希望它更改客户JPanel上所有InternalFrame的标签或文本。我怎么称呼这个方法?提前致谢

以下代码是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
 }

1 个答案:

答案 0 :(得分:2)

您可以使用返回当前活动框架的JDesktopPane.getSelectedFrame。您可以从布局管理器中检索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);