Java 如何使一个班级的变化在另一个班级生效?

Java 如何使一个班级的变化在另一个班级生效?,java,class,user-interface,Java,Class,User Interface,我正在用java设计一个下载管理器的GUI,在程序的主框架(JFrame)中有几个按钮,其中一个是打开JD对话框的设置按钮,在设置部分,用户可以在几种默认外观(如钢、Nimbus等)之间进行选择。 问题是,我想将外观和感觉的更改应用于设置部分和大型机,但由于设置部分是不同的框架和类,更改只在设置框架中生效,我不知道如何使此更改影响主面板。 代码(设置类的一部分): UIManager.LookAndFeelInfo[]LAFInfo=UIManager.getInstalledLookAndFe

我正在用java设计一个下载管理器的GUI,在程序的主框架(JFrame)中有几个按钮,其中一个是打开JD对话框的设置按钮,在设置部分,用户可以在几种默认外观(如钢、Nimbus等)之间进行选择。
问题是,我想将外观和感觉的更改应用于设置部分和大型机,但由于设置部分是不同的框架和类,更改只在设置框架中生效,我不知道如何使此更改影响主面板。
代码(设置类的一部分):

UIManager.LookAndFeelInfo[]LAFInfo=UIManager.getInstalledLookAndFeels();
String[]LookAndFeels=新字符串[LAFInfo.length];
for(int i=0;i
以下是一个如何实现这一目标的示例: 将调用窗口传递给对话框,并使用
SwingUtilities.updateComponentTreeUI

public class Main {
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JButton open=new JButton("Open Look and feel chooser");
        open.addActionListener(e -> {
            new LookAndFeelDialog(frame);
        });
        frame.setLayout(new FlowLayout());
        frame.getContentPane().add(open);
        frame.setLocationRelativeTo(null);
        frame.setPreferredSize(new Dimension(400, 100));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}
还有JDialog

class LookAndFeelDialog extends JDialog {


    public LookAndFeelDialog(Frame callingFrame) {
        super(callingFrame, "Pick a look and feel");
        setPreferredSize(new Dimension(300,100));

        UIManager.LookAndFeelInfo[] LAFInfo = UIManager.getInstalledLookAndFeels();
        String [] LookAndFeels = new String[LAFInfo.length];
        for (int i = 0; i < LAFInfo.length; i++) {
            LookAndFeels [i] =  LAFInfo[i].getName();
            JComboBox<String> lookAndFeelChoices = new JComboBox<>(LookAndFeels);
            add(lookAndFeelChoices);

            lookAndFeelChoices.addItemListener(e -> {
                try {
                    UIManager.setLookAndFeel(LAFInfo[lookAndFeelChoices.getSelectedIndex()].getClassName());
                    // update current window
                    SwingUtilities.updateComponentTreeUI(getContentPane());
                    // update calling frame
                    SwingUtilities.updateComponentTreeUI(callingFrame);
                } catch (Exception ei) {
                    ei.printStackTrace();
                }
            });
        }

        setLocationRelativeTo(callingFrame);
        pack();
        setVisible(true);
    }

}
类LookAndFeelDialog扩展了JDialog{
公共外观设计图(框架称为框架){
super(调用Frame,“选择外观和感觉”);
设置首选尺寸(新尺寸(300100));
UIManager.LookAndFeelInfo[]LAFInfo=UIManager.getInstalledLookAndFeels();
String[]LookAndFeels=新字符串[LAFInfo.length];
for(int i=0;i{
试一试{
UIManager.setLookAndFeel(LAFInfo[lookAndFeelChoices.getSelectedIndex()].getClassName());
//更新当前窗口
updateComponentTreeUI(getContentPane());
//更新呼叫帧
SwingUtilities.updateComponentTreeUI(调用框架);
}捕获(异常ei){
ei.printStackTrace();
}
});
}
setLocationRelativeTo(调用帧);
包装();
setVisible(真);
}
}
class LookAndFeelDialog extends JDialog {


    public LookAndFeelDialog(Frame callingFrame) {
        super(callingFrame, "Pick a look and feel");
        setPreferredSize(new Dimension(300,100));

        UIManager.LookAndFeelInfo[] LAFInfo = UIManager.getInstalledLookAndFeels();
        String [] LookAndFeels = new String[LAFInfo.length];
        for (int i = 0; i < LAFInfo.length; i++) {
            LookAndFeels [i] =  LAFInfo[i].getName();
            JComboBox<String> lookAndFeelChoices = new JComboBox<>(LookAndFeels);
            add(lookAndFeelChoices);

            lookAndFeelChoices.addItemListener(e -> {
                try {
                    UIManager.setLookAndFeel(LAFInfo[lookAndFeelChoices.getSelectedIndex()].getClassName());
                    // update current window
                    SwingUtilities.updateComponentTreeUI(getContentPane());
                    // update calling frame
                    SwingUtilities.updateComponentTreeUI(callingFrame);
                } catch (Exception ei) {
                    ei.printStackTrace();
                }
            });
        }

        setLocationRelativeTo(callingFrame);
        pack();
        setVisible(true);
    }

}