public void onClick(View v) {
final EditText et = new EditText(context)
new AlertDialog.Builder(context)
.setTitle("说明")
.setMessage("单个页卡内按钮事件测试")
.setView(et)
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(context, "单击确定按钮", Toast.LENGTH_LONG).show()
}
}).setNegativeButton("取消",null).show()
}
JAVAd窗,有下面常见的2种方法实现:
通过JDialog(模式窗口) 类来实现.里面的写法类似JFrame
重点方法提示: setModal(true)
//当设置为true表示,如果不关闭这个d窗,那么主界面的其他组件都无法 *** 作,该d窗置于其他窗口的前面
//当设置为false表示,可以绕开本d窗,对主界面的其他组件进行 *** 作
优点: 功能强大, 扩展性强
缺点: 代码量大.
示例图
通过JOptionPane(提示框) 来实现
效果图如下
优点: 代码量少,简单,方便, 普通场景已经够用
缺点: 扩展性不够, 复杂逻辑难以实现.
下面写一个具体案例
场景:当用于对文本域的文字,进行 *** 作后,那么退出时,提示用户, 是否要保存已经更改后的内容. 如果用户没有修改内容,那么不用提示
重点代码
addDocumentListener-->用于实现对文本内容发生改变时进行响应
addWindowListener--->用于实现对窗口进行 *** 作时进行响应
完整代码如下
import java.awt.Fontimport 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)//点击窗口的关闭按钮时,执行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表示关闭了d出的对话框等情况的默认值
//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) {
}
//文档事件,有下面三个,如果触发其中一个,都可以认为修改了文档,所以需要在退出时进行提示,是否保存
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虚拟机退出
}
}
运行效果图:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)