【问题标题】:Look And Feel in Java Applet Doesn't WorkJava Applet 中的外观不起作用
【发布时间】:2011-08-26 20:05:18
【问题描述】:

我使用以下代码来设置我的 Java Applet 的外观。这完全适用于 Java 应用程序。

编辑

@Override
public void init() {

    try {
        //This sets the look and feel to NIMBUS.
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    initComponents();
        //Calls the method showStartScreen()
        startGame();

}

这在我的网页上随机运行。有什么建议吗?

【问题讨论】:

  • 不起作用是什么意思?
  • 当我运行小程序时,它会显示默认的外观。它没有显示 Nimbus 的外观。
  • 你确定这段代码正在执行吗?您是否尝试过使用调试器查看它?

标签: java netbeans look-and-feel japplet nimbus


【解决方案1】:

我是 Nimbus 的忠实粉丝之一

import javax.swing.*;
import javax.swing.GroupLayout.Alignment;
import java.awt.event.*;

public class NimbusSizing implements Runnable, ItemListener {

    private JFrame frame;
    private JSpinner spinner;
    private JComboBox combo;
    private JRadioButton radio;
    private JCheckBox check;
    private JButton button;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new NimbusSizing());
    }

    @Override
    public void run() {
        for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
            System.out.println("\t" + info);
            if ("Nimbus".equals(info.getName())) {
                try {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                } catch (Exception x) {
                    x.printStackTrace();
                }
            }
        }
        JPanel panel = new JPanel(null);
        GroupLayout layout = new GroupLayout(panel);
        panel.setLayout(layout);
        combo = new JComboBox(new Object[]{"mini", "small", "regular", "large"});
        combo.setSelectedIndex(2);
        combo.addItemListener(this);
        spinner = new JSpinner();
        radio = new JRadioButton("Radio");
        check = new JCheckBox("Check");
        button = new JButton("Button");
        layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING, true).
                addComponent(spinner).addComponent(radio).
                addComponent(check).addComponent(button).addComponent(combo));
        final int sz = GroupLayout.PREFERRED_SIZE;
        layout.setVerticalGroup(layout.createSequentialGroup().addComponent(spinner, sz, sz, sz).
                addComponent(radio, sz, sz, sz).addComponent(check, sz, sz, sz).
                addComponent(button, sz, sz, sz).addComponent(combo, sz, sz, sz));
        frame = new JFrame(getClass().getSimpleName());
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);

    }

    @Override
    public void itemStateChanged(ItemEvent evt) {
        if (evt.getStateChange() == ItemEvent.SELECTED) {
            resize((String) combo.getSelectedItem());
        }
    }

    private void resize(String value) {
        System.out.println("resize(" + value + ")");
        System.out.println("\t" + spinner.isFontSet() + " " + System.identityHashCode(spinner.getFont()) + " " + spinner.getFont());
        spinner.putClientProperty("JComponent.sizeVariant", value);
        combo.putClientProperty("JComponent.sizeVariant", value);
        radio.putClientProperty("JComponent.sizeVariant", value);
        check.putClientProperty("JComponent.sizeVariant", value);
        button.putClientProperty("JComponent.sizeVariant", value);
        spinner.setFont(null);
        for (int i = spinner.getComponentCount(); --i >= 0;) {
            spinner.getComponent(i).setFont(null);
        }
        radio.setFont(null);
        check.setFont(null);
        button.setFont(null);
        combo.setFont(null);
        SwingUtilities.updateComponentTreeUI(frame);
        System.out.println("\t" + spinner.isFontSet() + " " + System.identityHashCode(spinner.getFont()) + " " + spinner.getFont());
    }
}

【讨论】:

  • 此答案适用于 java 应用程序,而不适用于 applet。对于应用程序,nimbus 像这样工作,但对于 applet,它不起作用,即使您在 init 方法中设置它。
【解决方案2】:

调用代码时遇到什么异常?

如果没有例外,您是否总是在绘制 ANYTHING 之前调用外观更改?

最后,可能是用户没有设置/安装那种外观和感觉吗?

【讨论】:

  • 也不例外。它位于 init() 方法中,就在 initComponents() 之后。我不知道我必须画它......无论如何,它随机决定在我的浏览器上工作。我只是想知道如何让它全职工作。
  • 我刚刚编辑了上面显示的代码,显示了我的整个 init() 方法。
  • 你试过在浏览器中调试进程吗?如果你不能,你能转储大量的打印语句来获取信息吗?
  • 我想我会做一些调试。
猜你喜欢
  • 2011-07-04
  • 1970-01-01
  • 2014-05-14
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-03
  • 1970-01-01
相关资源
最近更新 更多