2013-10-21 18 views
-1

我有一个JFrame的JFrame取决于看起来不同如何其加载

public class Help extends JFrame { 

    private JPanel contentPane; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     try { 
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     } catch (Throwable e) { 
      e.printStackTrace(); 
     } 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        Help frame = new Help(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public Help() { 
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     contentPane.setLayout(new BorderLayout(0, 0)); 
     setContentPane(contentPane); 
    } 

} 

如果我在Eclipse运行此我得到如下: How i want it to look

现在如果呼叫此从JButtonActionListener内使用另一个JFrame

btnHelp.addActionListener(new ActionListener(){ 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       EventQueue.invokeLater(new Runnable() { 
        public void run() { 
         try { 
          Help frame = new Help(); 
          frame.setVisible(true); 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
        } 
       }); 
      } 

     }); 

然后JFrame负载看起来像这样: How i don't want it to look

这对我来说看起来很丑。为什么不是第一个样式加载时,我从另一个JFrame s JButton ActionListener初始化JFrame?在我看来,我正在用两种加载方法运行完全相同的代码。

+0

您可以将外观设置为任何你喜欢的。 –

+1

在第二种情况下,新的JFrame与应用程序中的其他JFrame具有相同的外观和风格。所以看看你在哪里设置它的应用程序。是否有设置外观和感觉的线,与第一个示例中的类似? –

+0

@DavidWallace修复。完善!我没有注意到主应用程序没有一个代码的感觉线。随意发布这个答案。 – Edd

回答

1

在第二个示例中,新的JFrame与应用程序中的其他JFrame具有相同的外观和风格。

您的评论表明您没有设置该应用程序的外观。

使用与第一个示例中的行类似的行来执行此操作。

2

的代码这种特殊的段:

try { 
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
} catch (Throwable e) { 
    e.printStackTrace(); 
} 

的变化就是我们所说的看&感觉JFrame的。这包括从按钮图形,动画到框架中默认大小组件的大小和比例。在JFrame被拖到屏幕上之前,必须设置外观和感觉,并且在中间程序中更改它可能会非常棘手。因此,我相信你从actionListener的第二次调用或者没有看到感觉代码,或者发生在外观设置之前。因为它是一个“全局”属性(即它影响正在运行的程序中的所有框架),所以我亲自把它作为main()方法的第一个语句,以防止任何可能的意外创建在语句被调用之前的帧。

请注意,虽然没有设置外观,但java会采用跨所有操作系统保持不变的默认跨平台视图。 UIManager.getSystemLookAndFeelClassName()更改此行为以允许系统特定的L & F.您可能需要在跨操作系统分发程序时考虑到这一点,就像系统特定的L & F一样,微调的布局可能会被破坏由于不同的元件尺寸。

相关问题