彈出消息,可以使用 TrayIcon 的 displayMessage() 方法,代碼如下:
成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括神池網(wǎng)站建設(shè)、神池網(wǎng)站制作、神池網(wǎng)頁(yè)制作以及神池網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,神池網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到神池省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
import?java.awt.*;
import?java.awt.TrayIcon.MessageType;
import?javax.swing.JButton;
import?javax.swing.JFrame;
public?class?App?extends?JFrame?{
private?static?final?long?serialVersionUID?=?1L;
private?TrayIcon?trayIcon;
public?App()?{
this.setSize(300,?200);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new?FlowLayout());
JButton?btnTest?=?new?JButton("彈出消息");
btnTest.addActionListener(e?-?{
//?彈出消息
trayIcon.displayMessage("Tray?Demo",?"Hello?World!",?MessageType.INFO);
});
this.add(btnTest);
if?(SystemTray.isSupported())?{
SystemTray?tray?=?SystemTray.getSystemTray();
Image?image?=?Toolkit.getDefaultToolkit().getImage("images/tray16.png");
this.trayIcon?=?new?TrayIcon(image);
try?{
tray.add(trayIcon);
}?catch?(AWTException?e)?{
e.printStackTrace();
}
}
}
public?static?void?main(String[]?args)?{
new?App().setVisible(true);
}
}
tcp或者udp設(shè)置為全局的,不要定義在某一個(gè)窗體里面,當(dāng)udp讀取線程接受到數(shù)據(jù)后,就直接new這個(gè)窗體,把消息帶過(guò)去,比如new ChatFrame(String msg).show();就行了。
JAVA彈窗,有下面常見的2種方法實(shí)現(xiàn):
通過(guò)JDialog(模式窗口) 類來(lái)實(shí)現(xiàn).里面的寫法類似JFrame
重點(diǎn)方法提示:?setModal(true);
//當(dāng)設(shè)置為true表示,如果不關(guān)閉這個(gè)彈窗,那么主界面的其他組件都無(wú)法操作,該彈窗置于其他窗口的前面
//當(dāng)設(shè)置為false表示,可以繞開本彈窗,對(duì)主界面的其他組件進(jìn)行操作
優(yōu)點(diǎn): 功能強(qiáng)大, ?擴(kuò)展性強(qiáng)
缺點(diǎn): 代碼量大.
示例圖
通過(guò)JOptionPane(提示框) 來(lái)實(shí)現(xiàn)
效果圖如下
優(yōu)點(diǎn): 代碼量少,簡(jiǎn)單,方便, 普通場(chǎng)景已經(jīng)夠用
缺點(diǎn): 擴(kuò)展性不夠, 復(fù)雜邏輯難以實(shí)現(xiàn).
下面寫一個(gè)具體案例
場(chǎng)景:當(dāng)用于對(duì)文本域的文字,進(jìn)行操作后,那么退出時(shí),提示用戶, 是否要保存已經(jīng)更改后的內(nèi)容. ?如果用戶沒(méi)有修改內(nèi)容,那么不用提示
重點(diǎn)代碼
addDocumentListener--用于實(shí)現(xiàn)對(duì)文本內(nèi)容發(fā)生改變時(shí)進(jìn)行響應(yīng)
addWindowListener---用于實(shí)現(xiàn)對(duì)窗口進(jìn)行操作時(shí)進(jìn)行響應(yīng)
完整代碼如下
import?java.awt.Font;
import?java.awt.event.*;
import?javax.swing.*;
import?javax.swing.event.*;
public?class?JDDemo?extends?JFrame?implements?DocumentListener,WindowListener{
JTextArea?jta;
boolean?flag;
public?JDDemo()?{
jta?=?new?JTextArea();//文本域
jta.setText("床前明月光");//文本域的文字--可以通過(guò)IO加載txt文檔的文字
jta.setFont(new?Font("宋體",Font.BOLD,?20));//文本域的字體
jta.setLineWrap(true);//設(shè)置自動(dòng)換行
jta.getDocument().addDocumentListener(this);//添加文檔變化事件的響應(yīng).比如修改,刪除等
JScrollPane?jsp?=?new?JScrollPane(jta);//滾動(dòng)面板(當(dāng)文字太多時(shí),顯示滾動(dòng)條)
add(jsp);
setTitle("主窗口");//標(biāo)題
setSize(300,?260);//大小
setLocationRelativeTo(null);//居中
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//點(diǎn)擊窗口的關(guān)閉按鈕時(shí),執(zhí)行windowClosing的代碼
addWindowListener(this);
setVisible(true);//窗口可見
}
public?static?void?main(String[]?args)?{
new?JDDemo();
}
//實(shí)現(xiàn)WindowListener接口,需要重寫下面的6個(gè)方法,?windowClosing專門處理關(guān)閉時(shí)的方法
public?void?windowOpened(WindowEvent?e)?{
}
public?void?windowClosing(WindowEvent?e)?{
if(flag){
int?n?=?JOptionPane.showConfirmDialog(null,?"已經(jīng)更改了內(nèi)容,需要保存后再退出嗎?",?"提示",JOptionPane.YES_NO_OPTION);
//n等于-1表示關(guān)閉了彈出的對(duì)話框等情況的默認(rèn)值
//n等于0(JOptionPane.YES_OPTION)表示選擇了Yes
//n等于1(JOptionPane.NO_OPTION)表示選擇了No
if(n==JOptionPane.YES_OPTION){
//把文字保存到文件的代碼省略...
System.out.println("正在使用IO進(jìn)行保存..ing");
closeFrame();//關(guān)閉窗口并退出
}else?if(n==JOptionPane.NO_OPTION){
System.out.println("放棄保存修改.馬上退出");
closeFrame();
}
}else{
closeFrame();
}
}
public?void?windowClosed(WindowEvent?e)?{
}
public?void?windowIconified(WindowEvent?e)?{
}
public?void?windowDeiconified(WindowEvent?e)?{
}
public?void?windowActivated(WindowEvent?e)?{
}
public?void?windowDeactivated(WindowEvent?e)?{
}
//文檔事件,有下面三個(gè),如果觸發(fā)其中一個(gè),都可以認(rèn)為修改了文檔,所以需要在退出時(shí)進(jìn)行提示,是否保存
public?void?insertUpdate(DocumentEvent?e)?{//插入
flag=true;
}
public?void?removeUpdate(DocumentEvent?e)?{//刪除
flag=true;
}
public?void?changedUpdate(DocumentEvent?e)?{//改變
flag=true;
}
//關(guān)閉窗口的方法
public?void?closeFrame(){
this.setVisible(false);//窗口不可見
this.dispose();//窗口銷毀
System.exit(0);//JVM虛擬機(jī)退出
}
}
運(yùn)行效果圖: