Java(图形用户界面)GUI
目录
基本了解
容器和组件
首层容器
常用组件
1、组件与容器的关系
2、组件的类型有哪些常用的类型
所有组件创建的基本步骤:
API
基本了解
GUI发展阶段分两个:
- “awt”技术,第一阶段的技术都放在了java.awt包中。主要包含了:
- 带有外观的容器和组件类;比如:窗体、按钮、文本框….
- 帮助实现特效的工具类;比如:颜色类、字体类、图片图像类….
- 对于各种动作事件的处理类;比如:点击事件、鼠标移动、键盘事件….
但是,awt的问题出在了带外观的容器和组件类上。它的外观容器和组件的实现方式是偷懒了的。比如:产生一个按钮对象,那么它会直接到当前操作系统的图形库里面找操作系统定义的按钮设计,然后直接使用。所以出现了一个问题:不同操作系统下的图形库,同样的容器或组件在设计的时候标准是不同的。这就导致同样的一段JavaGUI的代码在不同的操作系统下可能会出现不同的展示效果。这与Java设计的跨平台特性冲突了。
- “swing”技术,在此阶段,Java重新设计了带有外观的容器和组件类,这些类放在了javax.swing包当中。(eXtend拓展)
所以在jdk当中同一个容器或组件就有两个类,比如按钮;
java.awt.Button
javax.swing.JButton
类名的区别就是swing当中容器或组件类 在类型前面有一个J。
“swt”就是两个技术一起用
容器和组件
容器:装东西的 组件:装在里面的东西
首层容器就是GUI界面最外层的容器
中间容器是它所属的外部容器的组件,但是它里面又可以放子容器或组件。在设计复杂界面的时候,这种容器嵌套关系,可以帮助我们把复杂问题划分为一个个的简单问题。
组件就不能再放东西了,它自己就是最底层的一个部件。比如:按钮、文本框…
首层容器
JFrame;常用!他提供了我们常见的窗体样式。如:标题栏、最大化、最小化、关闭按钮…
JDialoge;较常用,弹窗
JWindow;提供空白窗口
JApplet;被淘汰的历史遗留技术;
常用组件
1、组件与容器的关系
所有的子容器和组件,与父容器的关系都应该是has-a关系;也就是说的子容器和组件都应该是父容器的属性。
2、组件的类型有哪些常用的类型
标签 — JLable
注意:主要是放置文字或图片。标签还可以 作为 中间容器用。
文本框 — JTextField
密码框 — JPasswordField
按钮 — JButton
单选框 — JRadionButton
复选框 — JCheckBox
下拉列表 — JComboBox
文本域 — JTextArea
所有组件创建的基本步骤:
s1、new 出组件对象;— 通用
s2、设置组件的内容和样式;
s3、设置组件的大小和位置;— 空布局下,通用setBounds()
s4、把组件放入容器当中。— 通用容器.add(组件)
API
private Container contentP; //内容面板
private JLabel 变量名; // 文字/图片 标签
private JTextField nameTxt; //文本框
private JPasswordField pwdTxt; //密码框
private JButton 变量名; // 文字/图片按钮 带图标的文字按钮
private JRadioButton 变量名; //单选框
private JCheckBox 变量名; //复选框
private JComboBox<String> 变量名;// 下拉列表
private JTextArea 变量名; //消息文本域
窗体 用的内容面板
无参构造(){
this.setSize(300,500);//大小
this.setLocationRelativeTo(null);//窗口位置为屏幕中央 (必须先设置size
this.setTitle("标题");//设置标题栏
this.setIconImage(Toolkit.getDefaultToolkit().createImage("img/hp.JPG"));//设置图标
this.setResizable(false);//窗体大小 是否可变
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗体即退出程序
this.addContent();//调用方法(增加内容)
this.setVisible(true);//显示
}
//获取真正放置组件
private void addContent(){
this.contentP = this.getContentPane();//获取窗体的内容面板
this.contentP.setLayout(null);//设置空布局,即采用绝对定位的方式
this.contentP.setBackground(Color.WHITE);//设置内容面板背景色
//文字标签
this.变量名 = new JLabel();
this.变量名.setText("用户名:");//内容
this.变量名.setFont(new Font("宋体",Font.PLAIN,24));//字体
this.变量名.setForeground(new Color(20, 138, 180));//字体颜色
this.变量名.setBorder(BorderFactory.createLineBorder(Color.BLACK));//边线
this.变量名.setBounds(20,30,100,30);//位置
this.contentP.add(this.变量名);//增加进内容面板
//图片标签
this.变量名 = new JLabel();
ImageIcon image = new ImageIcon("img/aden.JPG");//设置图片自适应大小
ImageIcon newImage = new ImageIcon(image.getImage().getScaledInstance(宽,高,Image.SCALE_DEFAULT));
this.imgLab.setIcon(newImage);
this.imgLab.setBounds(位置x,y,宽,高);
this.contentP.add(this.imgLab);
//文本框
this.nameTxt = new JTextField();
this.nameTxt.setFont(new Font("宋体",Font.ITALIC,16));
this.nameTxt.setForeground(Color.RED);
this.nameTxt.setBounds(230,30,180,40);
this.contentP.add(this.nameTxt);
//密码框
this.pwdTxt = new JPasswordField();
this.pwdTxt.setFont(new Font("宋体",Font.ITALIC,16));
this.pwdTxt.setForeground(Color.RED);
this.pwdTxt.setEchoChar('?');//密码框特有的设置显示字符
this.pwdTxt.setBounds(230,80,180,40);
this.contentP.add(this.pwdTxt);
//文字按钮
this.txtBtn = new JButton("确定");
this.txtBtn.setFont(new Font("宋体",Font.ITALIC,16));
this.txtBtn.setForeground(Color.RED);
this.txtBtn.setBounds(30,130,80,30);
this.contentP.add(this.txtBtn);
//带图标的文字按钮
this.txtImgBtn = new JButton("登陆");
this.txtImgBtn.setIcon(new ImageIcon("img/hp.JPG"));//设置按钮默认图标
this.txtImgBtn.setRolloverIcon(new ImageIcon("img/logo.gif"));//设置鼠标进入按钮后的图标
this.txtImgBtn.setBounds(120,130,80,30);
this.contentP.add(this.txtImgBtn);
//图片按钮
this.imgBtn = new JButton();
this.imgBtn.setIcon(new ImageIcon("img/buttonClear.jpg"));
this.imgBtn.setBounds(210,130,140,50);
this.contentP.add(this.imgBtn);
//单选框
this.maleRad = new JRadioButton("男");
this.femaleRad = new JRadioButton("女");
//对同组的单选按钮进行逻辑分组
//ButtonGroup是没有外观的。
ButtonGroup genderGroup = new ButtonGroup();
genderGroup.add(this.maleRad);
genderGroup.add(this.femaleRad);
this.maleRad.setSelected(true);//设置某个单选按钮默认被选中
this.maleRad.setBounds(20,190,60,30);
this.femaleRad.setBounds(90,190,60,30);
this.contentP.add(this.maleRad);
this.contentP.add(this.femaleRad);
//复选框
this.swimChk = new JCheckBox("游泳");
this.footballChk = new JCheckBox("足球");
this.basketballChk = new JCheckBox("篮球");
this.footballChk.setSelected(true);
this.basketballChk.setSelected(true);
this.swimChk.setBounds(160,190,60,30);
this.footballChk.setBounds(230,190,60,30);
this.basketballChk.setBounds(300,190,60,30);
this.contentP.add(this.swimChk);
this.contentP.add(this.footballChk);
this.contentP.add(this.basketballChk);
//下拉列表
this.classComb = new JComboBox<>(new String[]{"J190","J191","J192"});
this.classComb.addItem("J193");
this.classComb.addItem("J194");
this.classComb.setSelectedIndex(3);//根据下标设置默认被选中的选项
this.classComb.setSelectedItem("J192");//根据对象设置默认被选中的选项
this.classComb.setEditable(false);//设置下拉列表可编辑
this.classComb.setEnabled(false);//设置下拉列表不可用
this.classComb.setBounds(20,240,100,30);
this.contentP.add(this.classComb);
//文本域
this.msgArea = new JTextArea();
this.msgArea.setFont(new Font("宋体",Font.BOLD,16));
this.msgArea.setForeground(Color.BLUE);
JScrollPane scrollPane = new JScrollPane(this.msgArea);//滚动面板
scrollPane.setBounds(20,300,460,150);
this.contentP.add(scrollPane);
}
//消息框
JOptionPane.showMessageDialog(null,"文本");
//输入框
String inputName = JOptionPane.showInputDialog(null,"文本");
//输入的字符串转int
int c1=Integer.parseInt(inputName );
if(c1==1){
}else{
}
System.out.println(inputName);
//确认框 -- 返回 0、1、2对应 Yes、No、取消
int choice = JOptionPane.showConfirmDialog(null,"文本",“标题”
JOptionPane.YES_NO_OPTION);
0 是 1否 2取消 -1 x
System.out.println(choice);
还没有评论,来说两句吧...