java外观和主要功能
如果我在点击按钮后在actionPerfomed中使用java外观,则效果更改不会正常工作,相反,它只是稍微更改 然而,如果我把相同的代码放在main上,它就会正常工作java外观和主要功能,java,look-and-feel,Java,Look And Feel,如果我在点击按钮后在actionPerfomed中使用java外观,则效果更改不会正常工作,相反,它只是稍微更改 然而,如果我把相同的代码放在main上,它就会正常工作 这个问题的解决方案是什么?当您在布局gui之前更改外观时,所有gui组件都知道如何绘制它们自己。如果在稍后阶段更改,则需要更新UI树,使更改传播到所有组件: UIManager.setLookAndFeel(lnfName); SwingUtilities.updateComponentTreeUI(frame); frame.
这个问题的解决方案是什么?当您在布局gui之前更改外观时,所有gui组件都知道如何绘制它们自己。如果在稍后阶段更改,则需要更新UI树,使更改传播到所有组件:
UIManager.setLookAndFeel(lnfName);
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();
关于这一点,请参阅
这是一个简单的示例,可在按下按钮时更改外观:
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);
}
如果你不想pack
frame(更改大小),只需调用repaint
。更改外观(顺便说一句,如何更改)会影响[新创建的JFrames]()