日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA桌面宠物

發布時間:2024/1/1 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA桌面宠物 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

忄辰桌面寵物【靜態】+【動態】

最近寒假剛剛開始,然后時間很多,就想做一款桌面寵物,但是本人能力有限,只能做個大概的,其實我覺得做得也挺好看的是吧QAQ,想要詳細做動態的話可以參考鏈接2,我做的比較簡單
感謝大佬的這兩片文章: 連接1.連接2
第一步:制作背景透明化
第二步:功能及代碼【附圖片】
第三步:動態代碼片【附效果圖】

第一步

我們需要有一個背景透明化的圖片,我是用PS的,也是第一次用,如果大佬有更好的辦法可以幫助一下我。。。
首先我們需要準備一張圖片
比如進擊的巨人 (三笠)百度找的圖

然后打開我們的PS應用,打開這張圖片

選擇這個魔法棒,點擊空白處鍵盤上的delete
效果如下

然后我們就可以得到一張背景透明化的圖片了啊哈哈
可以調整一下大小,按照你們想要的來調整就OK

第二步

我們現在就開始寫代碼,寫的比較亂,見諒,這里有的是直接搬運鏈接的代碼,如果想要學習可以去原鏈接看
主函數

//創建一個JFrameJFrame frame=new JFrame("桌面寵物");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//框體透明frame.setUndecorated(true);//取消標題欄frame.setBackground(new Color(0,0,0,0));//背景透明//增加托盤圖標setTray(frame);//設置位置并顯示在最前端frame.setAlwaysOnTop(true);//設置取消窗體任務欄圖標frame.setType(JFrame.Type.UTILITY);frame.setVisible(true);frame.setSize(200,200);frame.setLocation(1670,20);//運行時間jishiqi();//全局位置變量,用于鼠標在窗口上的位置Point origin = new Point();//添加圖標信息JLabel label=new JLabel();ImageIcon icon=new ImageIcon("tupian\\三笠.png");//圖片的路徑int chongwuwidth=icon.getIconWidth();int chongwuheight=icon.getIconHeight();icon.setImage(icon.getImage().getScaledInstance(chongwuwidth, chongwuheight, Image.SCALE_AREA_AVERAGING));label.setBounds(frame.getX(), frame.getY(), chongwuwidth, chongwuheight);label.setIcon(icon);frame.add(label);//添加窗體監聽器frame.addMouseListener(new MouseAdapter() {// 按下(mousePressed 不是點擊,而是鼠標被按下沒有抬起)public void mousePressed(MouseEvent e){origin.x=e.getX();origin.y=e.getY();}public void mouseClicked(MouseEvent e){if(e.getButton()==MouseEvent.BUTTON3)setable(frame,e.getComponent(),e.getX(),e.getY(),label);}});frame.addMouseMotionListener(new MouseMotionListener() {@Overridepublic void mouseMoved(MouseEvent e) {// TODO 自動生成的方法存根 }@Overridepublic void mouseDragged(MouseEvent e) {Point p=frame.getLocation();// 窗口當前的位置 + 鼠標當前在窗口的位置 - 鼠標按下的時候在窗口的位置frame.setLocation(p.x+e.getX()-origin.x,p.y+e.getY()-origin.y);}});frame.validate();}

托盤,可以將你的桌寵圖標放在托盤圖標里面

代碼如下

private static void setTray(JFrame frame) {if(SystemTray.isSupported())//判斷系統是否支持系統托盤{SystemTray tray=SystemTray.getSystemTray();//獲取當前系統的托盤//為托盤添加一個右鍵彈出式菜單PopupMenu menu=new PopupMenu();MenuItem openItem=new MenuItem("打開");openItem.addActionListener(e->frame.setVisible(true));MenuItem closeItem=new MenuItem("最小化");closeItem.addActionListener(e->frame.setVisible(false));MenuItem exItem=new MenuItem("退出");exItem.addActionListener(e->System.exit(0));menu.add(openItem);menu.addSeparator();menu.add(closeItem);menu.addSeparator();menu.add(exItem);ImageIcon icon=new ImageIcon("tupian\\可愛.png");Image image=icon.getImage().getScaledInstance(icon.getIconWidth(), icon.getIconHeight(),Image.SCALE_DEFAULT);TrayIcon trayIcon=new TrayIcon(image,"桌面寵物", menu);trayIcon.setImageAutoSize(true);//自適應尺寸*很重要try {tray.add(trayIcon);} catch (AWTException e1) {// TODO 自動生成的 catch 塊e1.printStackTrace();}} }

計時器,可以統計你的桌寵累計在線時長

代碼如下

public static void jishiqi() {int time=60000;ActionListener jishi=new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {try {RandomAccessFile raf=new RandomAccessFile("time.txt","rw");int times=Integer.parseInt(raf.readLine())+1;raf.seek(0);raf.write((times+"").getBytes());raf.close();} catch (NumberFormatException | IOException e1) {// TODO 自動生成的 catch 塊e1.printStackTrace();}}};new javax.swing.Timer(time,jishi).start(); }

彈出式菜單,當你鼠標右鍵點擊寵物時,會有關于寵物屬性,寵物設置,寵物選擇等

代碼如下

public static void setable(JFrame frame,Component b,int x,int y,JLabel label) {JPopupMenu menu=new JPopupMenu();JMenuItem shuxingItem=new JMenuItem("寵物設置");shuxingItem.addActionListener(e->set());JMenuItem selectItem=new JMenuItem("寵物屬性");selectItem.addActionListener(e->{try {able();} catch (IOException e1) {// TODO 自動生成的 catch 塊e1.printStackTrace();}});JMenuItem setItem=new JMenuItem("寵物選擇");setItem.addActionListener(e->select(frame,label));JMenuItem qqItem=new JMenuItem("聯系作者");qqItem.addActionListener(e->JOptionPane.showMessageDialog(null,"相逢何必曾相識","聯系作者",1));menu.add(shuxingItem);menu.addSeparator();menu.add(selectItem);menu.addSeparator();menu.add(setItem);menu.addSeparator();menu.add(qqItem);menu.show(b, x, y); }

寵物屬性面板

代碼如下

public static JFrame able() throws IOException {//寵物屬性變量RandomAccessFile raf=new RandomAccessFile("time.txt","rw");int time=Integer.parseInt(raf.readLine());raf.close();int level;if(time<60)level=1;else if(time>=60&&time<=200)level=2;else if(time>200&&time<=500)level=3;else if(time>500&&time<=100)level=4;elselevel=5;BufferedReader bufferedReader=new BufferedReader(new FileReader("name.txt"));String chongwunameString="";String zhurennameString="";String string="";while((string=bufferedReader.readLine())!=null){chongwunameString=string;zhurennameString=bufferedReader.readLine(); }bufferedReader.close();//寵物屬性面板JFrame frame=new JFrame("寵物屬性");frame.setSize(400,300);frame.setLocationRelativeTo(null);frame.setLayout(null);frame.setResizable(false);frame.setVisible(true);JPanel panel=new JPanel();panel.setLayout(new FlowLayout(FlowLayout.LEFT,30,20));JLabel label=new JLabel("寵物名字: "+chongwunameString);JLabel label2=new JLabel("主人名字: "+zhurennameString);JLabel label3=new JLabel("等級: lv "+level+" ");JLabel label4=new JLabel("累計在線時長: "+time+"分鐘");panel.add(label3);panel.add(label);panel.add(label2);panel.add(label4);panel.setBounds(0, 0,200, 300);frame.add(panel);frame.validate();return frame; }

寵物設置面板

代碼如下

public static JFrame set() {//寵物設置面板JFrame frame=new JFrame("寵物設置");frame.setSize(250,250);frame.setLocationRelativeTo(null);frame.setLayout(null);frame.setResizable(false);frame.setVisible(true);JPanel panel=new JPanel();panel.setLayout(new FlowLayout(FlowLayout.LEFT,5,10));panel.setBounds(0, 0, 250,150);JLabel label=new JLabel("寵物名字:");JLabel label2=new JLabel("主人名字:");JTextField jTextField=new JTextField(20);JTextField jTextField2=new JTextField(20);panel.add(label);panel.add(jTextField);panel.add(label2);panel.add(jTextField2);frame.add(panel);JButton button=new JButton("確認設置");button.setBounds(75, 165, 100,30);frame.add(button);button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {try {FileWriter fileWriter=new FileWriter("name.txt");fileWriter.write(jTextField.getText()+"\n");fileWriter.write(jTextField2.getText());fileWriter.close();JOptionPane.showMessageDialog(null,"設置完成","設置",1);frame.setVisible(false);} catch (IOException e1) {// TODO 自動生成的 catch 塊e1.printStackTrace();}}});return frame; }

寵物選擇面板

代碼如下

public static void select(JFrame frame,JLabel label) {//寵物選擇面板JFrame frame2=new JFrame("寵物選擇");frame2.setSize(450,300);frame2.setLocationRelativeTo(null);frame2.setLayout(null);frame2.setResizable(false);frame2.setVisible(true);JPanel panel=new JPanel();panel.setLayout(new FlowLayout(FlowLayout.LEFT));JLabel label2=new JLabel(" 古風漢服");ImageIcon icon=new ImageIcon("tupian\\古風漢服.png");JLabel label3=new JLabel();icon.setImage(icon.getImage().getScaledInstance(icon.getIconWidth(),icon.getIconHeight(),Image.SCALE_DEFAULT));label3.setIcon(icon);panel.add(label2);panel.add(label3);panel.setBounds(0, 0, 200,190);frame2.add(panel);JPanel panel2=new JPanel();panel.setLayout(new FlowLayout(FlowLayout.LEFT));JLabel nameLabel=new JLabel(" 薇爾莉特");ImageIcon icon2=new ImageIcon("tupian\\人類精靈.png");JLabel iconLabel=new JLabel();icon.setImage(icon.getImage().getScaledInstance(icon2.getIconWidth(), icon2.getIconHeight(), Image.SCALE_DEFAULT));iconLabel.setIcon(icon2);panel2.add(nameLabel);panel2.add(iconLabel);panel2.setBounds(225, 0, 200, 190);frame2.add(panel2);ButtonGroup buttonGroup=new ButtonGroup();JRadioButton gufengbut=new JRadioButton();JRadioButton jinglingbut=new JRadioButton();gufengbut.setBounds(85, 200, 40, 40);jinglingbut.setBounds(325, 200, 40, 40);buttonGroup.add(jinglingbut);buttonGroup.add(gufengbut);frame2.add(gufengbut);frame2.add(jinglingbut);Button button=new Button("選擇");button.setBounds(160, 230, 100, 40);frame2.add(button);button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if(gufengbut.isSelected()){selectchongwu(frame, label, "tupian\\微笑.png");frame2.setVisible(false);}if(jinglingbut.isSelected()){selectchongwu(frame, label, "tupian\\薇爾莉特.png"); frame2.setVisible(false);}}});frame2.validate(); }

這個是寵物的替換函數

public static void selectchongwu(JFrame frame,JLabel label,String nameString) {ImageIcon icon=new ImageIcon(nameString);int chongwuwidth=icon.getIconWidth();int chongwuheight=icon.getIconHeight();icon.setImage(icon.getImage().getScaledInstance(chongwuwidth, chongwuheight, Image.SCALE_AREA_AVERAGING));label.setIcon(icon); }

第三步

如何做動態的,這又是一個問題,首先我們需要Pr軟件,然后用你想要的GIF圖放進去,第一次用Pr沒人教真的,希望大佬有更高的辦法
如下圖所示

然后我們選擇那個導出幀和下一幀,將GIF變成圖片知道全部把幀變成圖片

然后將得到的圖片背景透明化,參考第一步。重命名為如b1,b2之類的,好進行鏈接,之后開始寫代碼(采用的是鏈接2中的代碼)

new Thread(() -> {int i=1;try{while (true){Thread.sleep(200);selectchongwu(frame, label,"tupian\\b"+ i++ +".png");//這個是你圖片的路徑if(i>29){Thread.sleep(500);i=1;}}} catch (Exception e){e.printStackTrace();}}).start();

然后我們就會得到一只會動的桌寵,如果你想按左鍵才能動可以添加監聽器等
效果如下

這些大家都可以改,我學的不是很好,希望可以被大佬指教出來問題
完。

總結

以上是生活随笔為你收集整理的JAVA桌面宠物的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。