在java中创建自己的swing界面

来源:互联网 发布:学大数据尚学堂 编辑:程序博客网 时间:2024/04/29 18:42

         相信大家都有这样的感觉吧!在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****()方法来改变外观,(***代表不同的名字)当然各自有各自的优点和不足
 

原创粉丝点击