第一次搞swing,自定义JDialog的例子较少,写下来备忘

,对JDialog中的文本框进行了验证

package com.chauvet;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.HashMap;
import java.util.Map; import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder; /***
* 定义的Dialog对话框
* @author WXW
*
*/
public class MyDialog extends JDialog implements ActionListener {
private static final long serialVersionUID = 1L; public static void main(String[] args) {
Map<String,String> caipinMap = new HashMap<String,String>();
String yxrsKey = "diyidaocai";
String yxrsVal = "1";
String djjdKey = "dierdaocai";
String djjdVal = "65";
String fqjdKey = "disandaocai";
String fqjdVal = "123";
String abcdKey = "disidaocai";
String abcdVal = "7";
caipinMap.put(yxrsKey,yxrsVal);
caipinMap.put(djjdKey,djjdVal);
caipinMap.put(fqjdKey,fqjdVal);
caipinMap.put(abcdKey,abcdVal); JFrame alertFrame = new JFrame();
MyDialog d =new MyDialog(alertFrame, true,caipinMap,360,320);
d.setVisible(true);
} JButton okBtn = new JButton("确定");
JButton cancelBtn = new JButton("关闭"); int x = 50;
int y = 30;
int width = 65;
int height = 20; /***
* 自定义 Dialog
* @param parent
* 父Frame
* @param modal
* 是否模式窗体
* @param caipinMap
* 数据Map
* @param windowWidth
* 宽度 需根据数据计算高度
* @param windowHeight
* 高度 默认320即可
*/
public MyDialog(JFrame parent, boolean modal,Map<String,String> caipinMap,int windowWidth,int windowHeight) {
super(parent,modal);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); //得到屏幕的尺寸
int screenWidth = screenSize.width;
int screenHeight = screenSize.height;
JButton []addBtns = new JButton[caipinMap.keySet().size()];
JButton []mutBtns = new JButton[caipinMap.keySet().size()];
int btnIndex = 0;
setTitle("test");
setSize(windowWidth,windowHeight);
setLayout(null);
setResizable(false);
// this.setUndecorated(true);
// setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
setLocation((screenWidth - this.getWidth()) / 2, (screenHeight - this.getHeight())/2); for (String strKey : caipinMap.keySet()) {
JLabel cpNameLBL = new JLabel(strKey+":");
add(cpNameLBL);
cpNameLBL.setBounds(x,y,width,height);
cpNameLBL.setName("lbl"+strKey); JLabel noticeLbl = new JLabel();
noticeLbl.setName("lbl"+strKey);
noticeLbl.setBounds(x+120,y,width,height); JTextField cpCountJTF = new JTextField(caipinMap.get(strKey));
add(cpCountJTF);
cpCountJTF.setName("jtf"+strKey);
cpCountJTF.setBounds(x+160,y,width,height);
cpCountJTF.requestFocus();
// cpCountJTF.setDocument(new NumberLenghtLimitedDmt(3));
cpCountJTF.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
JTextField jtf = (JTextField) e.getSource();
String selectVal = jtf.getSelectedText();
int keyChar = e.getKeyChar();
String val = jtf.getText();
if(null == val || val.trim().length() <= 0 || val.replaceAll("0", "").length() <= 0){ //文本框中没有值时默认为1
jtf.setText("1");
e.consume();
return;
} int valLength = val.length();
if((null != selectVal && selectVal.length() == valLength) && keyChar == KeyEvent.VK_0){
jtf.setText("1");
e.consume();
return;
} if ((keyChar >= KeyEvent.VK_0 && keyChar <= KeyEvent.VK_9)) { // 输入的是数字
if(valLength > 2){ // 长度大于2
if(keyChar != KeyEvent.VK_BACK_SPACE && !(null != selectVal && selectVal.trim().length() > 0) ){ // 按下的不是backspace键
e.consume();
}
}
return;
}
e.consume(); // 不是数字键
// JOptionPane.showMessageDialog(null, "非数字");
}
@Override
public void keyReleased(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {}
}); addBtns[btnIndex] = new JButton("+");
addBtns[btnIndex].setName("btn"+strKey);
addBtns[btnIndex].setBounds(x+260,y,width-40,height);
addBtns[btnIndex].setBorder(new EmptyBorder(5,5,5,5));
addBtns[btnIndex].addActionListener(this); mutBtns[btnIndex] = new JButton("-");
mutBtns[btnIndex].setName("btn"+strKey);
mutBtns[btnIndex].setBounds(x+80,y,width-40,height);
mutBtns[btnIndex].setBorder(new EmptyBorder(5,5,5,5));
mutBtns[btnIndex].addActionListener(this); add(addBtns[btnIndex]);
add(mutBtns[btnIndex]);
y = y + 30;
btnIndex ++;
} add(okBtn);
add(cancelBtn);
okBtn.setBounds(windowWidth - 190, windowHeight - 80, 60, 25);
okBtn.setName("ok");
cancelBtn.setBounds(windowWidth - 120, windowHeight - 80, 60, 25);
cancelBtn.setName("cancel");
okBtn.addActionListener(this);
cancelBtn.addActionListener(this);
} public void actionPerformed(ActionEvent e) {
Component[] cmp = getContentPane().getComponents();
JButton btn = (JButton)e.getSource();
String jtfKey = ""+btn.getName().replaceAll("btn", "");
if(null != jtfKey && !jtfKey.equals("ok") && !jtfKey.equals("cancel") ){
String btnText = btn.getText();
for (Component c : cmp) {
if(c instanceof JTextField){
JTextField tf = (JTextField) c;
if(c.getName().equals("jtf"+jtfKey)){ int val = Integer.parseInt(tf.getText());
if(btnText.equals("+")){
if(val < 999){
val = val + 1;
}
}else{
val = val - 1;
if(val <= 0){
val = 1;
}
}
tf.setText(String.valueOf(val));
}
}
}
return;
} if(e.getSource()==okBtn){
System.out.println("OK");
for (Component c : cmp) {
if(c instanceof JTextField){
JTextField js = (JTextField) c;
System.out.println(js.getName().replaceAll("jtf", "")+":"+js.getText());
}
}
return;
}
if(e.getSource()==cancelBtn){
System.out.println("cancel");
dispose();
return;
}
} }

swing自定义JDialog弹出框的更多相关文章

  1. 自定义PopupWindow弹出框(带有动画)

    使用PopupWindow来实现弹出框,并且带有动画效果 首先自定义PopupWindow public class LostPopupWindow extends PopupWindow { pub ...

  2. UIPresentationController - iOS自定义模态弹出框

    参考: https://developer.apple.com/library/archive/featuredarticles/ViewControllerPGforiPhoneOS/Definin ...

  3. iOS自定义提示弹出框(类似UIAlertView)

    菜鸟一枚,大神勿喷.自己在牛刀小试的时候,发现系统的UIAlertView有点不喜欢,然后就自己自定义了一个UIAlertView,基本上实现了系统的UIAlertView,可以根据项目的需求修改UI ...

  4. 微信小程序之自定义底部弹出框动画

    最近做小程序时,会经常用到各种弹框.直接做显示和隐藏虽然也能达到效果,但是体验性太差,也比较简单粗暴.想要美美地玩,添加点动画还是非常有必要的.下面做一个底部上滑的弹框. wxml <view ...

  5. vue中点击屏幕其他区域关闭自定义div弹出框

    直接上代码: mounted: function () { let that = this; $(document).on('click', function (e) { let dom = $('. ...

  6. 自定义ionic弹出框

    <img width="64" height="64" src="img/timg.jpg" style="border-r ...

  7. 自定义一个类似UIAlertView的弹出框

    这个是和UIAlertView类似,但是可以自定义view的样式废话不多说,上代码: 首先第一步:创建一个继承自View的类如: #import <UIKit/UIKit.h> @clas ...

  8. android自定义弹出框样式实现

    前言: 做项目时,感觉Android自带的弹出框样式比较丑,很多应用都是自己做的弹出框,这里也试着自己做了一个. 废话不说先上图片: 实现机制 1.先自定义一个弹出框的样式 2.自己实现CustomD ...

  9. 弹出框优化实例(alert和confirm)

    在项目过程中会遇到需要使用自己定义的弹出框的情况.以前用过ymprompt,但是它太复杂而且不好自己操控.所以自己写了一个弹出框实例. 主要有两类弹出框alert和confirm.基于jQuery a ...

随机推荐

  1. git开发错分支

    1,代码未提交时: 使用以下命令即可解决. git add .      (把所有改动暂存) git stash     (把暂存的文件提交到git的暂存栈) git checkout 本该提交代码的 ...

  2. 【转发】Linux中设置服务自启动的三种方式

    有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务 主要用三种方式进行这一操作: ln -s                       在/etc/rc.d/rc*.d目录中建立/e ...

  3. css中pt、px、em、ex、in等这类长度单位详细说明

    在CSS样式表中,我们经常会看到pt, px,em,ex,in等这类长度单位.它们各是什么意思,有什么区别呢? 在CSS样式表中,长度单位分两种: 相对长度单位,如px, em等 绝对长度单位,如pt ...

  4. javascript模块化编写

    目录: 1. 开篇语 2. 对象形式写法 3. 立即执行函数写法 4. prototype写法 5. 总结 1. 开篇语 现在我们写代码不再是一个人包办所有的活儿,都是在多人合作的情况下完成的.我们只 ...

  5. Shell 命令挂后台执行

    使用nohup命令,结合& #!/bin/bash #挂后台执行文件 kimbo_test.sh nohup >& & 说明:0 是标准输入(STDIN),1 是标准输出 ...

  6. 关于.net4.0中的Action委托

    在使用委托时,若封装的方法无返回值,并且参数在0-7个,可考虑使用.Net4.0中的Action委托,建议使用系统自带的,减少自定义 public delegate void Action<in ...

  7. 代码题 — 剑指offer题目、总结

    剑指offer题目总结:  https://www.cnblogs.com/dingxiaoqiang/category/1117681.html 版权归作者所有,任何形式转载请联系作者.作者:马孔多 ...

  8. BZOJ 1003 [ZJOI2006]物流运输trans ★(Dijkstra + DP)

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=1003 思路 先Dijkstra暴力求出i..j天内不变换路线的最少花费,然后dp[i] = ...

  9. element UI 中DateTimePicker 回传时间选择

    之前在项目中用vue和element,日期和时间选择用的element2.0 的DateTimePicker 日期选择后提交没问题,在编辑页面通过后端返回时间字符串(敲黑板,这里是重点)绑定也没洒问题 ...

  10. sql 日志统计-日、周、月活跃数

    近日网站需求:统计日志表的 日.周.月活跃数.最终研究了出来了,分享给大家看下.  如果有更好的sql语句也可以评论下方. --日活跃量 ), cr.AddTime, )as addtimt,COUN ...