【问题标题】:Java 7u7 setLookAndFeel doesn't work?Java 7u7 setLookAndFeel 不起作用?
【发布时间】:2012-09-06 00:22:12
【问题描述】:

在 Netbeans 7.2 中,当我输入 setLookAndFeel(); 时,它说找不到该方法。我做错了什么?

import javax.swing.*;

public class SalutonFrame extends JFrame  {

    public SalutonFrame() throws UnsupportedLookAndFeelException {
        super("Saluton Mondo!");

        setLookAndFeel();

        setSize(350, 100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

【问题讨论】:

  • 另外,请注意JFrame 本身不是JComponent。它没有外观和感觉,除了主机平台提供的外观。

标签: java swing netbeans compiler-errors


【解决方案1】:

要设置框架的外观和感觉,您必须在构造函数之前通过 UIManager 进行设置。你可以这样做:

    UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
    JFrame someFrame = new JFrame();

或您想要使用的外观和感觉的任何类,而不是示例中显示的基本 Java 外观。请参阅here 了解更多信息。

【讨论】:

    【解决方案2】:

    ..找不到方法。

    很像getPonyRide()的方法。如果我们编造了未在该类或其扩展的任何类中定义的方法,编译器将提示它们不存在。

    如果您键入类似的内容,IDE 通常会显示一个下拉菜单选项。

    instanceOfObject.
    

    ..或..

    this.
    

    在输入. 的那一刻(或稍后,取决于开发框的速度),应该出现一个可能的方法和属性的列表。在选择之前仔细考虑各种可能性。

    建议

    1. 不要扩展框架,只引用一个。首选composition over inheritance
    2. 不要调用setSize(),而是在添加所有组件后调用pack()
    3. 使用JFrame.DISPOSE_ON_CLOSE 进行退出操作。

    【讨论】:

    • 对不起,我不太明白你的第一个建议。您似乎在暗示将类作为JFrame 的实例是不好的。至少对我来说,这比一遍又一遍地参考框架要少得多。
    • @fireshadow52 如果框架没有自定义方法,则不应扩展它。另一种表达方式是“首选composition over inheritance”。要降低“麻烦”因素,请使用 IDE。
    【解决方案3】:

    您好像正在阅读《Sams 24 小时自学 Java,第 6 版》一书?

    无论如何,你可以这样做:

    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.*;
    
    public class SalutonFrame extends JFrame {
    
        public SalutonFrame() throws UnsupportedLookAndFeelException {
            super("Saluton Mondo!");
    
            try {
                UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
                JFrame someFrame = new JFrame();
    
                setSize(350, 100);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            } 
    
            catch (Exception exc) {
                //  error handling
            }
        }
    }
    

    或者你可以这样做:

    import javax.swing.*;
    
    public class SalutonFrame extends JFrame {
    
        public SalutonFrame() {
    
            super("Saluton Frame");
            setLookAndFeel();
            setSize(350, 100);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
        }
    
        private void setLookAndFeel() {
    
            try {        
    
                UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
    
            } catch (Exception exc) {
                //  error handling
            }
        }
    
        public static void main(String[] args) {
            SalutonFrame sal = new SalutonFrame();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-23
      • 2017-08-26
      • 2016-08-28
      • 2012-07-21
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多