java外观和主要

发布于 2024-10-07 06:47:58 字数 127 浏览 3 评论 0原文

如果我在单击按钮后在 actionPerfomed 中使用 java 外观,则效果更改无法正常工作,而只是略有变化。

但是,如果我将相同的代码放在 main 上,它就可以正常工作。

解决这个问题的办法是什么?

If I use java look and feel in actionPerfomed after a button is clicked, the effect changing is not working correctly, instead it just changes slightly.

However, if I put the same code on main, it working correctly.

What would be the solution for this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧时浪漫 2024-10-14 06:47:58

当您在布置 GUI 之前更改外观时,所有 GUI 组件都知道如何绘制自己。如果您稍后更改它,则需要更新 UI 树以使更改传播到所有组件:

UIManager.setLookAndFeel(lnfName);
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();

请参阅 java 文档 关于此内容。

这是一个简单的示例,按下按钮时会更改外观和感觉:

public static void main(String[] args) {

    final JFrame frame = new JFrame("Test");

    frame.add(new JButton(new AbstractAction("Press to change") {

        int current = 0;

        @Override
        public void actionPerformed(ActionEvent e) {

            LookAndFeelInfo[] lafs = UIManager.getInstalledLookAndFeels();
            LookAndFeelInfo laf = lafs[current++ % lafs.length];

            try {
                UIManager.setLookAndFeel(laf.getClassName());
                SwingUtilities.updateComponentTreeUI(frame);
                frame.pack();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }));

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
}

如果您不想打包 框架(更改其大小),只需调用 <改为代码>重绘。

When you change the look and feel before you lay out the gui all GUI components know how to draw themselves. If you change it at a later stage you need to update the UI tree to make the changes propagate to all components:

UIManager.setLookAndFeel(lnfName);
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();

See the java documentation about this.

This is an simple example that changes the look and feel when pressing the button:

public static void main(String[] args) {

    final JFrame frame = new JFrame("Test");

    frame.add(new JButton(new AbstractAction("Press to change") {

        int current = 0;

        @Override
        public void actionPerformed(ActionEvent e) {

            LookAndFeelInfo[] lafs = UIManager.getInstalledLookAndFeels();
            LookAndFeelInfo laf = lafs[current++ % lafs.length];

            try {
                UIManager.setLookAndFeel(laf.getClassName());
                SwingUtilities.updateComponentTreeUI(frame);
                frame.pack();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }));

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
}

If you don't want to pack the frame (change the size of it) just call repaint instead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文