1.gui (graphical user interface)
awt sun公司最早的gui,不美观,不兼容各平台
swing : awt升级
2.顶层容器(只有一个)(其他的只能放这里)Jframe Jdialog对话框 Jwindow(x)
//在main方法写
f=new Jframe();
f.setSize(300,300); //设置大小
f.setTitle("hello"); //设置窗口标题
f.setLocation(500,200);//设置在屏幕的位置,默认在左上角
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置点击关闭按钮,关闭程序,不用设置也可以(默认)
f.setVisible(true); //可见,但是看不到,要设置大小
class Jframe extends JFrame{
JButton b1,b2,b3;
JPannel p;
public MyFrame(){//放在构造方法里面
//上面的代码改
b1= new JButton("aaa");
// this.add(b1);//窗口添加按钮,不显示,覆盖了
//this.add(b1);//覆盖了
p=new Panel(new FlowLayout( FlowLayout.LEFT,10,15));//左对齐,组件内部的对齐方式左 顶部距离
//可以自己new 出来定义
p.add(b1);
p.add(b2);
this.add(p);
}
}//main方法new出来
-----完整代码-----
public class testMyFrame {
public static void main(String[] args) {
MyFrame myFrame = new MyFrame();
}
}
class MyFrame extends JFrame{
JPanel jPanel;
JButton jb,jb2;
MyFrame(){
setTitle("标题");
setLocation(200,200);
setBounds(200,200,300,500);
jPanel=new JPanel();
jb=new JButton("按钮1");
jb2=new JButton("按钮2");
jPanel.add(jb);
jPanel.add(jb2);
jPanel.setSize(300,300);
add(jPanel);
//记得最后一步才设置,不然不显示
setVisible(true);
}
}
2.JPanel中间容器(不能独立存在,放在其他容器中)
3.布局方式
panel.setLayOut(xxx);
1.FlowLayout 流布局,从左到右 从上到下(默认布局,默认中间.可以设置对齐方式)
2.BorderLayout 边界布局 容器分为 东西南北中
------------------
北
东 中 西
南
-------------------
p=new Panel(new BorderLayout(10,15));//东西南北之间的间距
//button放的位置,自己可以添加pannel
p.add(btn1, BorderLayoutEAST);//没人放中间; WEST SOUTH NORTH CENTER
3.GridLayout网格布局 格子多大界面有多大(弹性)
private JButton[] btns;
p=new Panel(new GridLayout(3,3));//3行3列 只能行等于列,不然只显示1列
btns=new JButton[6];
for:
p.add(btns[i]);
--------完整代码-----
public class testMyFrame {
public static void main(String[] args) {
MyFrame myFrame = new MyFrame();
}
}
class MyFrame extends JFrame{
JPanel jPanel;
JButton jb,jb2,jb3,jb4;
MyFrame(){
setTitle("标题");
setLocation(200,200);
setBounds(200,200,300,500);
jPanel=new JPanel(new GridLayout(2,1));
jPanel.setBackground(Color.RED);
jPanel.setSize(300, 300);
jb=new JButton("按钮1");
jb2=new JButton("按钮2");
jPanel.add(jb);
jPanel.add(jb2);
jPanel.setSize(300,300);
add(jPanel);
//记得最后一步才设置,不然不显示
setVisible(true);
}
}
4.卡片布局(用得少)(像扑克牌一样显示)
JPanel panel;
Frame2(){
super("第3题习题");
this.setSize(400,350);
this.setLocation(300,200);
panel = new JPanel();
JButton jb1 = new JButton("按钮1");
JButton jb2 = new JButton("按钮2");
JButton jb3 = new JButton("按钮3");
JButton jb4 = new JButton("按钮4");
JButton jb5 = new JButton("按钮5");
CardLayout cardLayout = new CardLayout();
panel.setLayout(cardLayout);
panel.add(jb1);
panel.add(jb2);
panel.add(jb3);
panel.add(jb4);
panel.add(jb5);
//是在布局后的pannel后的,前面是完整放入的组件中first和last
cardLayout.last(panel);
this.add(panel);
5.BoxLayout盒布局(按照x轴或y轴排放元素)
p=new Panel(new .BoxLayout(p,));//垂直摆放 X相反
public class houseWork3BoxGui {
public static void main(String[] args) {
Frame4 frame = new Frame4();
frame.setVisible(true);
}
}
class Frame4 extends JFrame {
JPanel panel;
Frame4(){
super("第3题习题");
this.setSize(400,350);
this.setLocation(300,200);
panel = new JPanel();
JButton jb1 = new JButton("按钮1");
JButton jb2 = new JButton("按钮2");
JButton jb3 = new JButton("按钮3");
JButton jb4 = new JButton("按钮4");
JButton jb5 = new JButton("按钮5");
BoxLayout boxLayout = new BoxLayout(panel,BoxLayout.Y_AXIS);
panel.setLayout(boxLayout);
Insets insets = new Insets(0,100,0,0);
panel.add(jb1);
panel.add(jb2);
panel.add(jb3);
panel.add(jb4);
panel.add(jb5);
this.add(panel);
}
}
6.空布局(全部原始宽高置空,直接自己设置位置); (考试还是使用这个比较方便)
//设置空布局
setLayOut(null);
//全部组件有个方法setBounds(0,0,200,200);//记得设置为初始位置,不然看不到
//精确设置xy和大小,
#解决文本框不能设置大小的问题
passwordField.setColumns(20);
3.事件(重点)(发生动作)
事件源(发生的场所,地方,按钮)
事件处理 对发生事件进行处理
事件监听器(接口) event Listener
监听事件发生
1.点击事件改颜色例子
- 高级监听事件有对应的方法等待实现,包括了按钮列表菜单
ActionEvent------ActionListenner- 低级事件…
MouseEvent—MouseListenner
//写个监听类
class Listenner impls ActionListenner: //鼠标MouseListenner
actionPerformed(e)://处理事件函数
Object obj=(JButton)e.getSource();//得到事件源(得到这个btn)
if(btn==btnRed){//内部类所以可以对比对象,!!!向btn靠拢
p.setBackground(Color.red); //pannel
}else if(){xxxx}
//组件添加我们的监听器监听器(注册监听器)
Listsener l=new Listsener();
btnRed.addActionListener(l);
btnGreen.addActionListener(l);
使用匿名内部类(推荐)
btnRed.addActionListener(new ActionListener(){
xxx(){
}
});
5.适配器实现了方法(可以少写实现的方法) extends xxAdapter直接覆盖
(但是进行了细化)
extends MouseMotionAdapter//只有拖动
this.repaint();//jframe的方法触发 重写的paint方法
this.p.repaint();//相当于清除
g.drawLine(prex,prey,x,y);
//Btn1左 2中 3右
6.其他常用高级组件
//设置图片icon
Toolkit t = Toolkit.getDefaultToolkit();
//设置Icon
Image i = t.getImage("c:\\adbfe8e3432cc45860d2bdbf5f4bd407.gif");// 相对.java的路径 image:\\time.png
this.setIconImage(i);//设置大容器的左上角图标
//在组件画图片,JFrame覆盖方法
public void paint(Graphics g){
d.drawImage(icon.getImage(),50,50,this);//当前对象
}
//在按钮添加图标
new JButton("aaa",icon);
//在jpanel不能设置
7.JLabel(不能响应用户操作)(不能时间监听)(可以类extends)
new JLabel("text",icon,xx); //只是提示功能
8.文本组件(必须setColume不然不显示)
JTextField类//接收单行文本,指定输入字符长度
JpasswordField//密码框可以设置 可以遮挡的字符
JTextArea //长文本 多行
-----高级组件------
9.对话框(可以独立存在的顶级容器)
1.模式(只有关闭按钮,对焦我们这个,点不了父窗口)有套路
jd=new JDialog(this,"提示", Dialog.ModalityType.APPLICATION_MODAL);
2.非模式(可以点父窗口)
jd=new JDialog(this,"提示", Dialog.ModalityType.MODELESS);
new JDialog(Frame owner,title,Model);//指定父类窗体,标题,是否模式,默认非模式(不用!!!,只能指定Frame父类)
.setVisible(true);//可见
3.自定义 trim去首尾空格
extends JDialog
//标准对话框(显示消息和获取消息) 确认消息,显示消息bti !!!(推荐使用,无论是是容器就可以用)
JOptionPane jOptionPane = new JOptionPane();
jOptionPane.showMessageDialog(jp,"登录成功","提示",JOptionPane.ERROR_MESSAGE);
第一个可以null,消息内容,标题,自带的图标
//输入对话框
JOptionPane.showInputDialog(null,"输入数字");
//确认框
.showConfirmDialog(null,"msg","title",JOptionPane.YES_NO_OPTION);//自己可以选择
int res = jOptionPane.showConfirmDialog(jp, "是否要保存");
//选择对话框
//
JOptionPane jOptionPane = new JOptionPane();
String options[]={"方案1","方案2","方案3"};
// int res = jOptionPane.showConfirmDialog(jp, "是否要保存");
jOptionPane.showOptionDialog(jp, "选择一个方案:",
"方案", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null,
options, "方案1");
//文件对话框
JFileChooser fc= new JFileChooser();
int val=fc.showOpenDialog(this);//打开对话框
//如果点击对话框的打开按钮
String name1 ="";
String path="";
if(val==JFileChooser.APPROVE_OPTION){
//得文件名和路径
name1=fc.getSelectedFile().getName();
path= fc.getCurrentDirectory().toString();
}
FileReader d=new FileReader(path+"\\"+name1);
//保存文件对话框
fc.showSaveDialog(this);
10.带滚动条的面板(文本放不下)
new JScrollPane("文本");
11.颜色对话框
JColorChooser ch=new JColorChooser();
JDialog jDialog = new JDialog();
jDialog=JColorChooser.createDialog(this, "title", true, new JColorChooser(), new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
}, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});
jDialog.setVisible(true);
Color color = ch.getColor();//得到颜色
System.out.println(color);//rgb的值
12.菜单栏(菜单[菜单项])
JMenuBar menuBar= new JMenuBar();
this.setJMenuBar(menuBar);//放jframe的顶部
// 有监听器,是否分离式菜单
JMenu menu =new JMenu("title",true);
menuBar.add(menu);
JMenuItem item=new JMenuItem("aaa");
JMenuItem item1=new JMenuItem("bbb");
menu.add(item);
menu.add(item1);
menu.addSeparator();//组件之间加分割线
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("点击了");
}
});
13.工具栏 JToolBar(对比,不是只是放文字)
JToolBar bar=new JToolBar();
JButton btn =new JButton("save", new ImageIcon("c:\\adbfe8e3432cc45860d2bdbf5f4bd407.gif"));//设置标题和icon
btn.setToolTipText("保存");//鼠标放上的提示信息
bar.add(btn);
jp.add(bar);//放容器顶部
14.空布局的完整登录demo(包括了大部分上面提到的组件)
public class nullLayOut {
public static void main(String[] args) throws FileNotFoundException {
MyLayout myLayout = new MyLayout();
myLayout.setVisible(true);
}
}
class MyLayout extends JFrame {
JPanel jp,jp2,jp3,jp4;
JButton jb;
JDialog jd;
JLabel name_lable,pwd_lable,alter_lable;
JTextField name;
JPasswordField passwordField;
JDialog jdl;
MyLayout() throws FileNotFoundException {
setTitle("登录");
setBounds(100,200,500,500);
setLayout(null);
Toolkit t = Toolkit.getDefaultToolkit();
//设置Icon
Image i = t.getImage("c:\\adbfe8e3432cc45860d2bdbf5f4bd407.gif");
this.setIconImage(i);
jp=new JPanel();
jp.setBounds(0,0,500,100);
jd=new JDialog(this,"提示", Dialog.ModalityType.MODELESS);
// jp.setBackground(Color.BLACK);
jp2=new JPanel();
jp2.setBounds(0,100,500,100);
// jp2.setBackground(Color.RED);
jp3=new JPanel();
jp3.setBounds(0,200,500,100);
// jp3.setBackground(Color.RED);
jp4=new JPanel();
jp4.setBounds(0,300,500,100);
// jp4.setBackground(Color.RED);
name_lable=new JLabel("用户名:");
pwd_lable=new JLabel("密码:");
alter_lable=new JLabel("提示");
name=new JTextField();
name.setColumns(20);
name.setBounds(0,0,500,200);
passwordField=new JPasswordField();
name.setBounds(0,0,500,200);
passwordField.setColumns(20);
jb=new JButton("登录");
jb.setIcon(new ImageIcon("c:\\adbfe8e3432cc45860d2bdbf5f4bd407.gif"));
jb.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("鼠标点");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("鼠标按");
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("鼠标释放");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("鼠标进入");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("鼠标离开");
}
});
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JButton jb=(JButton)e.getSource();
if(jb.getText().equals("登录")){
System.out.println("设置背景");
jb.setBackground(Color.RED);
}
if(passwordField.getText().equals("aaa")&& name.getText().equals("user")){
jd.setBounds(0,0,100,100);
jd.setVisible(true);
JOptionPane jOptionPane = new JOptionPane();
// jOptionPane.showMessageDialog(jp,"message","提示",JOptionPane.ERROR_MESSAGE);
String options[]={"方案1","方案2","方案3"};
jOptionPane.showInputDialog(jp,"输入数字");
// int res = jOptionPane.showConfirmDialog(jp, "是否要保存");
jOptionPane.showOptionDialog(jp, "选择一个方案:",
"方案", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null,
options, "方案1");
// System.out.println(res);
alter_lable.setText("登录成功");
System.out.println("成功");
}else{
alter_lable.setText("登录失败");
System.out.println("失败");
}
}
});
//======文件选择器=======
// JFileChooser fc= new JFileChooser();
// int val=fc.showOpenDialog(this);//打开对话框
// //如果点击对话框的打开按钮
// String name1 ="";
// String path="";
// if(val==JFileChooser.APPROVE_OPTION){
// //得文件名和路径
// name1=fc.getSelectedFile().getName();
// path= fc.getCurrentDirectory().toString();
// }
//
// FileReader d=new FileReader(path+"\\"+name1);
// //保存文件对话框
// fc.showSaveDialog(this);
//======文件选择器=======
//===========菜单栏================
JMenuBar menuBar= new JMenuBar();
this.setJMenuBar(menuBar);//放jframe的顶部
// 有监听器,是否分离式菜单
JMenu menu =new JMenu("title",true);
menuBar.add(menu);
JMenuItem item=new JMenuItem("aaa");
JMenuItem item1=new JMenuItem("bbb");
menu.add(item);
menu.add(item1);
menu.addSeparator();//组件之间加分割线
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("点击了");
}
});
//===========菜单栏================
//===========工具栏================
JToolBar bar=new JToolBar();
JButton btn =new JButton("save", new ImageIcon("c:\\adbfe8e3432cc45860d2bdbf5f4bd407.gif"));//设置标题和icon
btn.setToolTipText("保存");//鼠标放上的提示信息
bar.add(btn);
jp.add(bar);//放容器顶部
//===========工具栏================
//======颜色选择器=======
JColorChooser ch=new JColorChooser();
JDialog jDialog = new JDialog();
jDialog=JColorChooser.createDialog(this, "title", true, new JColorChooser(), new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
}, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});
jDialog.setVisible(true);
Color color = ch.getColor();//得到颜色
System.out.println(color);//rgb的值
//======颜色选择器=======
jp.add(name_lable);
jp.add(name);
jp2.add(pwd_lable);
jp2.add(passwordField);
jp3.add(jb);
jp4.add(alter_lable);
add(jp);
add(jp2);
add(jp3);
add(jp4);
}
}