1、设计模态框 及其 控制大小变化(当按钮解锁大小即可改变大小 点击之后变为锁定大小)
采用的是按钮事件监听嵌套——一个事件嵌套一个
代码示例:
JFrame jf=new JFrame("example");
JButton jb1=new JButton("打开一个模态窗口");
jf.setLayout(null);
jb1.setLayout(null);
jf.setBounds(200,200,300,300);
jb1.setBounds(20,20,200,20);
jf.add(jb1);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JDialog jd=new JDialog(jf,"this is a example!");
jd.setResizable(true);
jd.setLayout(null);
jd.setBounds(200,200,200,300);
JButton jb2=new JButton("locked!");
jb2.setLayout(null);
jb2.setBounds(20,20,100,100);
jd.add(jb2);
jd.setModal(true);
jb2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(jb2.getText()=="locked!")
{
jd.setResizable(false);
jb2.setText("Unloced!");
}
else
{
jd.setResizable(true);
jb2.setText("locked!");
}
}
});
jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
jd.setVisible(true);
}
});
需要解释的是 什么是模态窗口——其背后父窗口不能被关闭前提是该窗口为模态窗口——setmodal
一开始这段代码是运行不了的 还以为事件监听里不能嵌套 之后才发现对于JDialog的setDefaultCloseOperation()里放的是JDialog.DISPOSE_ON_CLOSE而不是JDialog.EXIT_ON_CLOSE
如果是EXIT_ON_CLOSE是直接打不开且是有异常的
2、布局器的使用 —— 计算器模板
JFrame jf=new JFrame("计算器模板");
JButton jb1=null;
Scanner s=new Scanner(System.in);
jf.setLayout(new GridLayout(4,5,8,8));
for (int i=1;i<=20;i++)
{
String str=s.nextLine();
jb1=new JButton(str);
jb1.setPreferredSize(new Dimension(51, 51));//这个是多余的部分 实在寻找如何网格分布有间隙中途的尝试
jf.add(jb1);
}
jf.setBounds(200,200,400,300);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
需要注意的就是 GridLayout 网格分布器里能放的参数不仅仅是几行几列的设定还有水平间隙和垂直间隙的设定