怀孕牙龈出血怎么改善:定义自己的Swing界面

来源:百度文库 编辑:中财网 时间:2024/04/29 15:00:11

定义自己的Swing界面

相信大家都有这样的感觉吧!在java中按钮上面的字体显示得很糟糕,让人看不清楚.还有就是弹出式对话框(JOptionPane)和JDialog上面的字也是一样,其实,这些东西在java中都是可以通过自定义界面样式来解决的,今天我就依我个人的一些经验说说怎么来定义自己的个性java界面!
  如果你看过sun公司的jdk帮助文档,你会发现在javax.swing这个包里面有很多类来定义组件的样式,特别是其中的UIManager和LookAndFeel这两个类为我们提供了非常方便的方法.
  还是先看看UIDefaules这个类吧,你在平时编程序的时候,所有的组件的默认值就是由它来定义的,在java中,swing组件的界面常量都保存在其中,它其实是一个哈希表(Hashtable), 构造方法如下UIDefaults(Object<> keyValueList)

,当然还有一个参数为空的构造方法,你可以重载此方法来定义你的组件常量,比如:
Object<> uiDefaults = {
          "Font", new Font("Dialog", Font.BOLD, 12),
          "Color", Color.red
           }
UIDefaults myDefaults = new UIDefaults(uiDefaults);
上面的例子就把组件的字体定义为:Dialog,黑体,大小为12,而颜色则是红色.
  UIManager类
  这个类有一个很有用的put(Object key, Object value)方法可以很有效的改变界面样式,比如说如果你要把一个JButton的前景色改为绿色,而把背景色该为黑色,你就可以这样写:
    UIManager.put("Button.background",Color.black);
    UIManager.put("Button.foreground",Color.green);
当然不仅可以改变组件的默认颜色,还可以改变所有在swing插入式界面中的常量(以后会在主页中罗列出,大约有将近600个),如:
改变滚动条的默认宽度:
  UIManager.put("ScrollBar.width",new Integer(25));
改变按钮的默认大小:
    UIManager.put("Button.preferredSize",new Dimension(30,30));
改变滚动条的默认颜色:
    UIManager.put("ScrollBar.trackHighlight",Color.black);
改变JInternalFrame的图标:
    UIManager.put("InternalFrame.icon",“*.ico“);
改变标签的边框:
    UIManager.put("Label.border",BorderFatory.createEtchedBorder());

等等,不过这些语句必须出现在你定义组件以前.切记啊!
  那也许会有人问我要在定义组件以后来改变其外观该怎么办呢?呵呵,别急,我们还有一个类没有呢,
    LookAndFeel 类
    LookAndFeel类有很多方法可以直接改变已经定义好的组件的界面样式,比如:
installBorder(JComponent c,String defaultBorderName)
installColors(JComponent c, String defaultBgName, String defaultFgName)
installColorsAndFont(JComponent c, String defaultBgName, String defaultFgName, String defaultFontName)installProperty JComponent c,String propertyName,Object propertyValue)等
下面举例说明各自的用法:
定义一个按钮的前景色和背景色:
JButton saveButton = new JButton(“保存“);
LookAndFeel.installColors(saveButton,"TextArea.background","Button.foreground");
定义一个标签的边框:
JLabel label = new JLabel(“gcyx-022@163.com“);
LookAndFeel.installBorder(label,BorderFatory.createLoweredBevelBorder());
如果你再仔细想一想.你还可以发现你可以用此方法来实现java中难以达到的问题,比如说在java中JLabel不支持多行显示文本,但在实际编程的时候又需要这样的功能,你该如何做呢?以下是我编的代码,看看是不是实现了呢?
    JTextArea area = new JTextArea();
    area.setFont(new Font(area.getFont().getFamily(),Font.PLAIN,18));
    LookAndFeel.installColorsAndFont(area,"Label.background","Label.foreground","TextArea.font");
    area.setForeground(Color.blue);
    area.setBorder(BorderFactory.createTitledBorder("The Text"));
    area.setLineWrap(true);
    area.setWrapStyleWord(true);
其实原理就是伪装了一个JLabel(实际是一个JTextArea),只要把JLabel的前景色和背景色赋给JTextArea并且使其不可编辑,这样不就和一个JLabel一模一样了吗?呵呵!

附:
  你也可以通过组件类所提供的set****()方法来改变外观,(***代表不同的名字)当然各自有各自的优点和不足
  以上代码都是出自我自己的程序中,绝不是生搬硬套,而且代码经实验运行结果正确!