1
如果我點擊一個按鈕後,在actionPerfomed中使用java的外觀和感覺,效果改變不能正常工作,而只是稍微改變。java的外觀和感覺和主要
但是,如果我把相同的代碼放在main上,它就能正常工作。
這將是什麼解決方案?
如果我點擊一個按鈕後,在actionPerfomed中使用java的外觀和感覺,效果改變不能正常工作,而只是稍微改變。java的外觀和感覺和主要
但是,如果我把相同的代碼放在main上,它就能正常工作。
這將是什麼解決方案?
當您在佈局GUI之前更改外觀和感覺所有GUI組件都知道如何繪製自己。如果你在稍後的階段改變它,你需要更新UI樹進行更改傳播到所有組件:
UIManager.setLookAndFeel(lnfName);
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();
見java documentation這個問題。
這是一個簡單的例子,按下按鈕時,改變了外觀和感覺:
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](http://download.oracle.com/javase/1.5.0/docs/api/javax/swing/JFrame .html#setDefaultLookAndFeelDecorated(boolean)) – khachik 2010-12-11 08:39:05