【发布时间】:2014-09-04 15:23:35
【问题描述】:
我有一系列的 JComponents 遵循外观,然后我希望临时设置一个新外观,以便在将其恢复为原始组件之前添加一些新组件。下面的代码显示了三个 JButton 的示例,其中“按钮 1”和“按钮 3”的外观应该相同,而“按钮 2”则不同。提供的代码确实恢复了整体外观,但是手动设置的lookandfeeldefaults(即字体字体)丢失了。干杯。
编辑:对不起,这个问题有点误导:所有的外观变化都发生在面板显示之前,如示例代码中所示。这个问题不同于建议的重复项,因为这里的问题是重新加载手动设置 (UIManager.getLookAndFeelDefaults().put(...)) 属性,而不是整体外观。这个问题的根本原因是我需要在面板中添加一个具有填充背景颜色的 JButton,并且 setBackground 在使用 windows look and feel 时仅设置 JButton 的边框,而 cross platform look and feel 填充背景。
更新:解决方案是使用UIManager.getLookAndFeelDefaults().putAll(previousLF); 而不是 setLookAndFeel。代码已相应更新。
import java.awt.Color;
import java.awt.Font;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
public class test {
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
public void run() {
//Set initial look and feel.
try{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
UIManager.getLookAndFeelDefaults().put("Button.font", new Font("Arial", Font.PLAIN, 20));
} catch (Exception e){}
JButton button1 = new JButton("1");
//change look and feel for button two.
UIDefaults previousLF = UIManager.getLookAndFeelDefaults();
try {
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
UIManager.getLookAndFeelDefaults().put("Button.background", Color.BLUE);
} catch (Exception e) {}
JButton button2 = new JButton("2");
//Revert look and feel.
try {
UIManager.getLookAndFeelDefaults().putAll(previousLF);
} catch (Exception e) {}
JButton button3 = new JButton("3");
//Add buttons to panel and display for testing purposes.
JPanel testPanel = new JPanel();
testPanel.add(button1);
testPanel.add(button2);
testPanel.add(button3);
JOptionPane.showMessageDialog(null, testPanel);
}
});
}
}
【问题讨论】:
标签: java swing user-interface look-and-feel jcomponent