自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Swing使用Substance外觀包異常問(wèn)題

開(kāi)發(fā) 后端
這是Swing工作形式,我的最后出來(lái)結(jié)果了,和以前系統(tǒng)默認(rèn)的就是大小比例的不同,不再拋出異常,我認(rèn)為是代碼的問(wèn)題,這是今天的收獲寫(xiě)出來(lái)大家分享一下,希望對(duì)一些困惑的朋友。

問(wèn)題一:今天更新我的Java版QQ,在網(wǎng)上找到了Substance外觀包,效果不錯(cuò),直接用了,可是設(shè)置水印問(wèn)題時(shí)就出現(xiàn)問(wèn)題,網(wǎng)上有現(xiàn)成的例子

  1. JFrame.setDefaultLookAndFeelDecorated(true);  
  2. JDialog.setDefaultLookAndFeelDecorated(true);  
  3. try  {  
  4.             SubstanceImageWatermark watermark  =   new  SubstanceImageWatermark(LoginFrame. class .getResourceAsStream( " /demo/001.jpg " ));  
  5.             watermark.setKind(ImageWatermarkKind.SCREEN_CENTER_SCALE);  
  6.             SubstanceSkin skin  =   new  OfficeBlue2007Skin().withWatermark(watermark);   //初始化有水印的皮膚  
  7.  
  8.             UIManager.setLookAndFeel( new  SubstanceOfficeBlue2007LookAndFeel());  
  9.             SubstanceLookAndFeel.setSkin(skin);  //設(shè)置皮膚  
  10.              
  11.         }  catch  (UnsupportedLookAndFeelException ex) {  
  12.             Logger.getLogger(LoginFrame. class .getName()).log(Level.SEVERE,  null , ex);  
  13.         } 

可是在我導(dǎo)入的包里死活包withWatermark方法不存在,于是就Google,最后看到一哥們說(shuō),自從subtance6.0以后就去掉了withWatermark設(shè)置水印方法,原因貌似是不安全,可是想用水印的效果呢?那你就換成substance5.0版本吧!換了之后果然能用了效果圖:背景比較淡,水印不明顯。

問(wèn)題二:使用subtance出現(xiàn)異常UIDefaults.getUI() failed: 和org.jvnet.substance.api.UiThreadingViolationException,有一前輩說(shuō)是包不能識(shí)別啥的,就我遇到的問(wèn)題,只是換了皮膚之后框架布局變了,不在于能不能用的問(wèn)題,關(guān)鍵還是在代碼上,我遇到的這個(gè)問(wèn)題就在于我的代碼設(shè)置問(wèn)題,先把我的部分代碼貼出來(lái)分析一下:

  1. package com.client.frm;  
  2.  
  3. import java.awt.AWTException;  
  4. import java.awt.Color;  
  5. import java.awt.Component;  
  6. import java.awt.Dimension;  
  7. import java.awt.FlowLayout;  
  8. import java.awt.Image;  
  9. import java.awt.Insets;  
  10. import java.awt.MenuItem;  
  11. import java.awt.PopupMenu;  
  12. import java.awt.SystemTray;  
  13. import java.awt.TrayIcon;  
  14. import java.awt.event.ActionEvent;  
  15. import java.awt.event.ActionListener;  
  16. import java.awt.event.MouseAdapter;  
  17. import java.awt.event.MouseEvent;  
  18. import java.awt.event.WindowAdapter;  
  19. import java.awt.event.WindowEvent;  
  20. import java.io.IOException;  
  21. import java.io.ObjectInputStream;  
  22. import java.io.ObjectOutputStream;  
  23. import java.util.HashMap;  
  24. import java.util.List;  
  25. import java.util.Vector;  
  26. import java.util.logging.Level;  
  27. import java.util.logging.Logger;  
  28.  
  29.  
  30. import javax.swing.DefaultListCellRenderer;  
  31. import javax.swing.DefaultListModel;  
  32. import javax.swing.ImageIcon;  
  33. import javax.swing.JButton;  
  34. import javax.swing.JComboBox;  
  35. import javax.swing.JDialog;  
  36. import javax.swing.JFrame;  
  37. import javax.swing.JLabel;  
  38. import javax.swing.JList;  
  39. import javax.swing.JMenuItem;  
  40. import javax.swing.JOptionPane;  
  41. import javax.swing.JPanel;  
  42. import javax.swing.JPopupMenu;  
  43. import javax.swing.JScrollPane;  
  44. import javax.swing.JTextArea;  
  45. import javax.swing.SwingConstants;  
  46. import javax.swing.SwingUtilities;  
  47. import javax.swing.UIManager;  
  48. import javax.swing.UnsupportedLookAndFeelException;  
  49. import javax.swing.border.LineBorder;  
  50.  
  51. import org.jvnet.substance.SubstanceLookAndFeel;  
  52. import org.jvnet.substance.api.SubstanceSkin;  
  53. import org.jvnet.substance.api.SubstanceConstants.ImageWatermarkKind;  
  54. import org.jvnet.substance.skin.OfficeBlue2007Skin;  
  55. import org.jvnet.substance.skin.SubstanceOfficeBlue2007LookAndFeel;  
  56. import org.jvnet.substance.watermark.SubstanceImageWatermark;  
  57.  
  58. import sun.audio.AudioPlayer;  
  59. import sun.audio.AudioStream;  
  60.  
  61. import tools.PicturePane;  
  62.  
  63. import data.ChatMessage;  
  64. import data.FriendUser;  
  65. import data.Portrait;  
  66. import data.QQMessage;  
  67. import data.UserState;  
  68.  
  69.  
  70. public class UserMainView extends JFrame implements ActionListener {  
  71.       
  72.     /**  
  73.      * @author Mackalli  
  74.    × 2011/10/3  
  75.      */ 
  76.     private static final long serialVersionUID = 1L;  
  77.     private JButton btnPhoto;  
  78.     private JComboBox jcbState;  
  79.     private JLabel lblNickName;  
  80.     private JTextArea areaSignature;  
  81.  
  82.     private JLabel lblLoginBar = new JLabel();  
  83.     private JButton btnLoginCancel;  
  84.     private JPanel fillWidth = new FillWidth(300200,false);  
  85.  
  86.     private JButton btnZone;  
  87.     private JButton btnEmail;  
  88.     private JButton btnNews;  
  89.     private JButton btnShop;  
  90.     private JButton btnSkin;  
  91.  
  92.     //Color bgColor = new Color(211, 234, 224);  
  93.  
  94.     private JList listFriend;  
  95.     private DefaultListModel listModel = null;  
  96.  
  97.     // Integer存入的類(lèi)型(K-此映射所維護(hù)的鍵的類(lèi)型),ChatView對(duì)應(yīng)映射(V - 所映射值的類(lèi)型)  
  98.     private HashMap<Integer, ChatView> chat;  
  99.     FriendUser friendUser = null;  
  100.     private FriendUser selfUser = null;  
  101.     private Vector<FriendUser> v;  
  102.  
  103.     private ObjectInputStream ois;  
  104.     private ObjectOutputStream oos;  
  105.  
  106.     String QQ_NickName;  
  107.     String QQ_Num;  
  108.     Integer photo;  
  109.     Integer QQ_State;  
  110.     String signature;  
  111.  
  112.     JPopupMenu popupMenu;  
  113.     JMenuItem itemChat;  
  114.     JMenuItem itemDelete;  
  115.     JMenuItem itemFriendInfo;  
  116.       
  117.     private JButton btnFind;  
  118.     private JButton btnHelp;  
  119.       
  120.     //private SystemTray systemTray=null;  
  121.     private SystemTray tray=null;   
  122.     static TrayIcon trayIcon=null;    // 靜態(tài)托盤(pán)圖標(biāo),收到信息閃動(dòng)提醒  
  123.     private Image trayImage=null;  
  124.       
  125.     private PopupMenu popupTray=new PopupMenu();  //托盤(pán)列表  
  126.     private MenuItem itemExit=new MenuItem("退出");  
  127.     private MenuItem itemSetSound=new MenuItem("關(guān)閉聲音");  
  128.       
  129.       
  130.     private PicturePane bgPane=new PicturePane();  
  131.       
  132.     private static SearchView searchView;  
  133.     private TrayThread trayThread=null;  
  134.       
  135.     private static boolean isAvailable=true;  //設(shè)置聲音默認(rèn)開(kāi)啟,在托盤(pán)中設(shè)置,就兩種形式,故用static  
  136.     //ChatView isVisible  
  137.     private boolean isShow=false;  
  138.     private boolean isOpenMsg=false;  
  139.     //if message is new  
  140.     private boolean isNewMessage=false;  
  141.       
  142.     private ChatView chatView;  
  143.       
  144.     public UserMainView(ObjectOutputStream oos, ObjectInputStream ois,  
  145.             Vector<FriendUser> v) {  
  146.         JFrame.setDefaultLookAndFeelDecorated(true);  
  147.         JDialog.setDefaultLookAndFeelDecorated(true);  
  148.         try {  
  149.             SubstanceImageWatermark watermark = new SubstanceImageWatermark(  
  150.                     UserMainView.class 
  151.                             .getResourceAsStream("/client/images/backImages/2.jpg "));  
  152.             watermark.setKind(ImageWatermarkKind.SCREEN_CENTER_SCALE);  
  153.             SubstanceSkin skin = new OfficeBlue2007Skin()  
  154.                     .withWatermark(watermark); // 初始化有水印的皮膚  
  155.  
  156.             UIManager.setLookAndFeel(new SubstanceOfficeBlue2007LookAndFeel());  
  157.             SubstanceLookAndFeel.setSkin(skin); // 設(shè)置皮膚  
  158.  
  159.         } catch (UnsupportedLookAndFeelException ex) {  
  160.             Logger.getLogger(UserMainView.class.getName()).log(Level.SEVERE,  
  161.                     null, ex);  
  162.         }  
  163.  
  164.         this.oos = oos;  
  165.         this.ois = ois;  
  166.         this.v = v;  
  167.  
  168.         setTitle("QQ_li");  
  169.         setSize(280630);  
  170.         setResizable(false);  
  171.         // getContentPane().setBackground(bgColor);  
  172.         // this.setContentPane(bgPane);  
  173.         setLocation(92060);  
  174.  
  175.         this.addWindowListener(new WindowAdapter() {  
  176.             public void windowIconified(WindowEvent e) {  
  177.                 setVisible(false);  
  178.             }  
  179.         });  
  180.         addTray();  
  181.  
  182.         initMainView(v);  
  183.         setVisible(true);  
  184.  
  185.         this.addWindowListener(new WindowAdapter() {  
  186.             public void windowClosing(WindowEvent e) {  
  187.                 QQMessage message = new QQMessage();  
  188.                 message.setType(77);  
  189.                 message.setObj(selfUser);  
  190.                 new WriteThread(message).start();  
  191.                 System.out.println(selfUser.getNickName() + "退出了");  
  192.                 chat = null;  
  193.                 UserMainView.this.dispose();  
  194.                 System.exit(0);  
  195.             }  
  196.         });  
  197.     } 

這是一個(gè)類(lèi),時(shí)刻要記得UIManager設(shè)置前提,放在構(gòu)造方法的最前面,調(diào)用時(shí)要用到Swing工作線程 SwingUtilities.invokeLater()來(lái)調(diào)用,我在LoginView中調(diào)用的方法:

  1. //userMainView = new UserMainView(oos, ois, v); // 加載用戶信<br> SwingUtilities.invokeLater(new Runnable() {<br> public void run() {   
  2.     userMainView = new UserMainView(oos, ois, v); // 加載用戶信息  
  3.      userMainView.setVisible(true);   
  4.      }   
  5.      });   
  6.     LoginView.this.setVisible(false);  

當(dāng)你出現(xiàn)上述異常時(shí)是不是直接

  1. userMainView = new UserMainView(oos, ois, v);   
  2. // 加載用戶信息  
  3. 沒(méi)有少量一句,SwingUtilities.invokeLater(new Runnable()  

這是Swing工作形式,我的最后出來(lái)結(jié)果了,和以前系統(tǒng)默認(rèn)的就是大小比例的不同,不再拋出異常,我認(rèn)為是代碼的問(wèn)題,這是今天的收獲寫(xiě)出來(lái)大家分享一下,希望對(duì)一些困惑的朋友。

有所幫助,我們這一行很多問(wèn)題就要自己解決,太多的差異網(wǎng)上的東西只能是參考!Good luck,friends!

最后感謝Java.net的精英們制作出來(lái)這么漂亮的Swing外觀來(lái)! GNU-UP UP?。。。。?!

對(duì)你有所幫助就收藏一下,大家一起分享程序的快樂(lè)!

原文鏈接:http://www.cnblogs.com/blog-li/archive/2011/10/03/mackalli.html

【編輯推薦】

  1. Swing多線程編碼過(guò)程中的誤區(qū)
  2. 控件位置可以配置的Swing桌面
  3. Swing特效:漸顯效果
  4. Java Swing用戶界面設(shè)計(jì):序
  5. 用Swing制作精美的圖層疊加圖
責(zé)任編輯:林師授 來(lái)源: java_li的博客
相關(guān)推薦

2012-05-31 14:11:49

SwingSubstance異常

2009-07-15 10:37:28

Swing外觀

2009-07-10 12:30:12

Swing組件

2009-07-10 15:18:48

Synth外觀Swing外觀

2012-01-11 09:39:50

Java

2009-07-14 14:03:56

Swing程序

2009-07-10 17:43:10

Swing.table

2009-07-15 11:19:17

invokeLaterSwing

2009-07-15 16:18:08

JSci.swing包

2009-06-29 16:36:00

JSP include

2009-07-17 10:01:14

Swing和AWT

2024-07-01 13:12:45

銳捷網(wǎng)絡(luò)

2010-05-24 14:04:48

JavaSwing多線程

2012-01-16 11:03:09

javaswing

2013-02-21 16:51:18

JavaNimbusJava Swing

2009-07-10 09:58:08

Swing控件聽(tīng)覺(jué)反饋

2012-05-02 16:25:47

JavaSwing

2009-07-09 13:44:22

Swing動(dòng)態(tài)界面設(shè)計(jì)

2009-11-09 10:10:13

WCF異常
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)