import java.awt.BorderLayout;
員工經過長期磨合與沉淀,具備了協作精神,得以通過團隊的力量開發(fā)出優(yōu)質的產品。創(chuàng)新互聯堅持“專注、創(chuàng)新、易用”的產品理念,因為“專注所以專業(yè)、創(chuàng)新互聯網站所以易用所以簡單”。公司專注于為企業(yè)提供成都網站制作、網站設計、微信公眾號開發(fā)、電商網站開發(fā),微信小程序開發(fā),軟件按需制作網站等一站式互聯網企業(yè)服務。
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import javax.swing.*;
public class TestFrame {
public static void main(String args[]) throws InterruptedException {
new LaunchFrame();
}
}
class LaunchFrame implements ActionListener {
LaunchFrame() throws InterruptedException{
Thread.sleep(0);
JFrame f = new JFrame();
JButton jb = new JButton("確定");
jb.addActionListener(this);
Label l = new Label("讓眼睛休息一會..");
f.setBounds(200, 200, 200, 200);
f.setLayout(new GridLayout(2,1));
f.add(l);
f.add(jb);
f.pack();
f.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
寫了一個很簡單的案例,可以參考和修改
import?java.awt.BorderLayout;
import?java.awt.GridLayout;
import?java.awt.event.ActionEvent;
import?java.awt.event.ActionListener;
import?javax.swing.JButton;
import?javax.swing.JDialog;
import?javax.swing.JFrame;
import?javax.swing.JLabel;
import?javax.swing.JTextField;
public?class?FromeDemo?extends?JFrame{
JButton?jbutton;
public?FromeDemo()?{
jbutton?=?new?JButton("彈出2個文本框");
jbutton.addActionListener(new?ActionListener()?{
@Override
public?void?actionPerformed(ActionEvent?e)?{
JDialog?jd?=?new?JDialog();
jd.setBounds(320,?180,?260,?100);
jd.setTitle("彈出文本框");
jd.getContentPane().setLayout(new?GridLayout(2,?2));
jd.add(new?JLabel("文本框一"));
jd.add(new?JTextField(80));
jd.add(new?JLabel("文本框二"));
jd.add(new?JTextField(80));
jd.setModal(true);//確保彈出的窗口在其他窗口前面
jd.setVisible(true);
}
});
add(jbutton,BorderLayout.SOUTH);
setBounds(300,?100,?320,?320);
setTitle("測試");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public?static?void?main(String?args[])?{
new?FromeDemo();
}
}
JAVA彈窗,有下面常見的2種方法實現:
通過JDialog(模式窗口) 類來實現.里面的寫法類似JFrame
重點方法提示:?setModal(true);
//當設置為true表示,如果不關閉這個彈窗,那么主界面的其他組件都無法操作,該彈窗置于其他窗口的前面
//當設置為false表示,可以繞開本彈窗,對主界面的其他組件進行操作
優(yōu)點: 功能強大, ?擴展性強
缺點: 代碼量大.
示例圖
通過JOptionPane(提示框) 來實現
效果圖如下
優(yōu)點: 代碼量少,簡單,方便, 普通場景已經夠用
缺點: 擴展性不夠, 復雜邏輯難以實現.
下面寫一個具體案例
場景:當用于對文本域的文字,進行操作后,那么退出時,提示用戶, 是否要保存已經更改后的內容. ?如果用戶沒有修改內容,那么不用提示
重點代碼
addDocumentListener--用于實現對文本內容發(fā)生改變時進行響應
addWindowListener---用于實現對窗口進行操作時進行響應
完整代碼如下
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("床前明月光");//文本域的文字--可以通過IO加載txt文檔的文字
jta.setFont(new?Font("宋體",Font.BOLD,?20));//文本域的字體
jta.setLineWrap(true);//設置自動換行
jta.getDocument().addDocumentListener(this);//添加文檔變化事件的響應.比如修改,刪除等
JScrollPane?jsp?=?new?JScrollPane(jta);//滾動面板(當文字太多時,顯示滾動條)
add(jsp);
setTitle("主窗口");//標題
setSize(300,?260);//大小
setLocationRelativeTo(null);//居中
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//點擊窗口的關閉按鈕時,執(zhí)行windowClosing的代碼
addWindowListener(this);
setVisible(true);//窗口可見
}
public?static?void?main(String[]?args)?{
new?JDDemo();
}
//實現WindowListener接口,需要重寫下面的6個方法,?windowClosing專門處理關閉時的方法
public?void?windowOpened(WindowEvent?e)?{
}
public?void?windowClosing(WindowEvent?e)?{
if(flag){
int?n?=?JOptionPane.showConfirmDialog(null,?"已經更改了內容,需要保存后再退出嗎?",?"提示",JOptionPane.YES_NO_OPTION);
//n等于-1表示關閉了彈出的對話框等情況的默認值
//n等于0(JOptionPane.YES_OPTION)表示選擇了Yes
//n等于1(JOptionPane.NO_OPTION)表示選擇了No
if(n==JOptionPane.YES_OPTION){
//把文字保存到文件的代碼省略...
System.out.println("正在使用IO進行保存..ing");
closeFrame();//關閉窗口并退出
}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)?{
}
//文檔事件,有下面三個,如果觸發(fā)其中一個,都可以認為修改了文檔,所以需要在退出時進行提示,是否保存
public?void?insertUpdate(DocumentEvent?e)?{//插入
flag=true;
}
public?void?removeUpdate(DocumentEvent?e)?{//刪除
flag=true;
}
public?void?changedUpdate(DocumentEvent?e)?{//改變
flag=true;
}
//關閉窗口的方法
public?void?closeFrame(){
this.setVisible(false);//窗口不可見
this.dispose();//窗口銷毀
System.exit(0);//JVM虛擬機退出
}
}
運行效果圖: