JAVA——JFrame窗体容器
java图形化界面设计——容器(JFrame)
目录
java图形化界面设计——容器(JFrame)
JFrame的使用
创建JFrame对象
JFrame jf = new JFrame("我是标题");
jf.setTitle("标题"); //标题设置的两种方式
jf.setSize(1000,600); //窗口大小
jf.setLocation(100,100); //窗口出现在屏幕上的位置
setSize和setLocation可以合并为一个即setBounds() jf.setBounds(100,100,1000,600);
jf.setVisible(true); // 设置窗口默认是否显示
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置关闭方式
JDialog
JDialog 是从一个窗体弹出来的另外一个窗体,和JFrame类似可当成一个JFrame使用,但是必须从属于JFrame
构造函数:
JDialog();
JDialog(Frame f); 指定父窗口
JDialog(Frame f,String title); 指定父窗口+标题
常用面板JPanel
JPanel就是一种最简单的面板
语法:
JPanel p = new JPanel(100,100,500,300) //生成面板
JPanel p = new JPanel(new FlowLayout()) //布局管理器
将面板添加进另外的容器中
容器名.add(p);
JScrollPane
JScrollPane是带滚动条的面板,在碰到需要将一个大的组件放到一个较小的空间的时候,即使用该面板其内只能添加一个组件,如果需要将多个组件添加到一个JScrollPane中时,需要先将需要添加的组件添加到JPanel中,再将JPanel添加进JScrollPane
JScrollPane jp = new JScrollPane(组件)
设置容器:
为JFrame设置一个面板容器,即可以往面板容器中添加组件
jf.setContentPane(jp);
标签组件JLabel
JLabel作用:显示文本或提示信息
构造函数:
new JLabel();
new JLabel(Icon icon); //设置图标
new JLabel(Icon icon,int aligment); //设置图标+水平对齐方式
new JLabel(String str,int aligment); //设置文本+水平对齐方式
SwingConstants.LEFT 左对齐
SwingConstants.CENTER 居中对齐
SwingConstants.RIGHT 右对齐
new JLabel(String str,Icon icon,int sligment); //设置文本+图标+水平对齐
例如:
JLabel jl = new JLabel();
jl.setText("账号");
jf.add(jl)
jf.setVisible(true);
jf设置关闭方式;
设置字体,风格,字号:
jl.setFont(new Font("微软雅黑",Font.PLAIN,14));
设置文字颜色:使用RGB颜色,百度RGB颜色表
jl.setForeground(new Color(255,255,255));
设置背景色:
jl.setOpaque(true); 默认背景是透明显示的,所以setOpaque设置为不透明才行
jl.setBackground(new Color(0,0,255));
设置控价大小:
jl.setPreferredSize(new Dimension(60,30));
Dimension指定宽度,高度
设置文本的对齐:
jl.setHorizontalAlignment(SwingConstants.CENTER);
JButton
作用:按钮
构造方法:
JButton();
JButton(String text); //指定文字
JButton(Icon icon); //指定图标
JButton(String text,Icon icon) //指定文字+图标
其他方法:
setTooltipText(String text); //设置提示文字
setBorderPainted(); // 设置边界是否显示
setEnabled(); // 设置按钮是否可用
单选按钮组件类
单选按钮组件类: JRadioButton ButtonGroup
说明:JRadioButton是一个单选按钮,需要将单选按钮加入到按钮组ButtonGroup中
构造方法:
JRadioButton();
JRadioButton(Icon icon); //指定图标
JRadioButton(Icon icon,boolean selected); //指定图标+是否选中
JRadioButton(String text); //指定文字
JRadioButton(String text,Icon icon); //指定文字+图标
JRadioButton(String text,Icon icon,boolean selected); //指定文字+图标+是否选中
复选组件框类 JCheckBox
构造方法:
JCheckBox();
JCheckBox(Icon icon,boolean checked); //指定图标+是否选中
JCheckBox(String text,boolean checked); //指定文字+是否选中
其他API:setSelected(boolean) 设置选中状态
boolean isSelected() 是否选中
addActionListener() 勾选或者取消复选框事件
下拉列表组件类 JComboBox
JComboBox<> jcb = new JComboBox<>();
JComboBox是一个泛型,参数类型T表示的是数据项的类型
构造方法:
JComboBox();
JComboBox(ComboBoxModel dataModel); //使用listModel建立一个下拉列表
JComboBox(Object[] arrayData);
JComboBox(Vector vector);
方法:
.addItem("下拉内容") //添加下拉内容
.count() 数据项个数
.getItemAt(index) 获取数据项
菜单栏:
步骤:
1.创建菜单栏 JMenuBar
2.创建菜单 JMenu
3.创建菜单项 JMenuItem
总结:菜单项依附菜单,菜单依附菜单条
注意:添加过的菜单项无法添加给其他菜单
文本组件类: JTextField
构造函数:
JTextField();
JTextField(String text); //指定默认文字
JTextField(int fieldwidth); //指定文本框长度
JTextField(String text,int fieldwidth); //指定默认文字+文本框长度
JTextField(Document docModel,String text,int fieldwidth); //指定文本框模式+默认文字+文本框长度
其他方法:
设置文本: jtf.setText(String str)
获取文本: str = jtf.getText()
密码框组件类:JPasswordField
构造函数:
JPasswordField();
JPasswordField(String str); //指定默认文字
JPasswordField(int fieldwidth); //指定文本框长度
JPasswordField(String str,int fieldwidth); //指定默认文字+文本框长度
JPasswordField(Document docModel,String text,int fieldwidth); // 指定文本框模式+默认文字+文本框长
其他方法:
setEchoChar('*'); //设置回显字符
文本域组件类: JTextArea
构造函数:
JTextArea();
JTextArea(String text); //指定默认文字
JTextArea(int rows,int cols); //指定长+宽
JTextArea(Document doc); // 指定文本模型
JTextArea(Document doc,String text,int rows,int cols); //指定文本模型+默认文字+长宽
其他方法:
setLineWrap(); //设置文本域是否自动换行
设置控价大小: 组件.setPreferredSize(new Dimension(60,30));
布局方式:
流布局 FlowLayout
所有组件像流一样,一个一个排放,排满了一行之后排下一行,默认情况下,每个组件是居中排列的但也可以设置
构造方法:
FlowLayout();
FlowLayout(int aligment); // 设置对齐方式(默认为FlowLayout.CENTER居中)
一般改为FlowLayout.LEFT左对齐
FlowLayout(int aligment,int horizGap,int vertGap);//设置对齐方式+上下偏移
通过setLayout函数来设置布局
例如:jf.setLayout(new FlowLayout(FlowLayout.LEFT));
边界布局BorderLayout
边界布局是默认的布局管理方式
边界布局将容器分成了
东(BorderLayout.NORTH)
南(BorderLayout.SOUTH)
西(BorderLayout.EAST)
北(BorderLayout.WEST)
中(BorderLayout.CENTER)五个区域
构造方法:
jf.setLayout(new BorderLayout());
在给JFrame容器添加组件的时候指定边界
如: jf.add(button1,BorderLayout.CENTER);
网格式布局管理器 GridLayout
网格布局是将容器划分为网格,所有的组件都按照行和列排列,网格的个数由行数和列数决定每个组件会填满空格,改变容器的大小,组件的大小也会相应的随之改变
构造方法:
GridLayout(int rows,int columns); //指定行数列数
GridLayout(int rows,int columns,int horizGap,int vertGap);//指定行数+列数+水平间隔+垂直间隔间隔指网格与网格之间的间距
手工布局
即不使用布局器
1.不使用布局器 jp.setLayout(null);
2.添加子控件 jp.add(组件)
3.指定控件的位置 组件.setBounds(0,0,100,50);
常用的事件监听器:
一个事件模型中有三个对象:事件源,事件,以及监听程序
事件监听机制:
事件源 事件发生的地方
事件 就是要发生的事情
事件处理 就是针对发生的事情做出的处理方案
事件监听 就是把事件源和事件关联起来
使用步骤:
1.新建一个组件(如JButton)
2.将该组件添加到相应的面板(如JFrame)
3.注册监听器以监听事件源产生的事件(如通过ActionListener来响应用户点击按钮)
4.定义处理事件的方法(如在ActionListener中的actionPerformed中定义相应方法)
两种监听器:
(一般用匿名内部类方式实现)--------内部类:即类里面的类
jla.addFocusListener(new FocusListener(){public void focusLost(FocusEvent e){
//失去焦点的时候
.................
}
public void focusGained(FocusEvent e){
//获取焦点的时候
.................
}
});
案列: button1.addActionListener(new AbstractAction(){
@Override
public void actionPerformed(ActionEvent e) {
jta.append("年轻人好自为之");
}
});
事件处理详解:
1.添加一个监听器类,实现ActionListener接口
class MyActionListener extends ActionListener{}
2.设置监听器
MyActionListener listener = new MyActionListener();
button1.addActionListener(listener)
示例代码
//创建JFrame窗口对象
JFrame jf = new JFrame("我是标题");
jf.setBounds(100,100,1000,600);
//面板
JPanel jp = new JPanel(new FlowLayout());
jf.add(jp);
//标签组件
JLabel jl = new JLabel("我是提示文本信息",SwingConstants.CENTER);
jl.setText("账号");
jp.add(jl);
//按钮组件
JButton jb = new JButton("按钮1");
jb.setBounds(100,100,200,100);
jb.setEnabled(true);
jb.setBorderPainted(true);
jp.add(jb);
//单选按钮组件
JRadioButton jrb1 = new JRadioButton("单选按钮组件1_男");
JRadioButton jrb2 = new JRadioButton("单选按钮组件2_女");
ButtonGroup bg = new ButtonGroup();
bg.add(jrb1);
bg.add(jrb2);
jp.add(jrb1);
jp.add(jrb2);
//复选组件框
JCheckBox jcb1 = new JCheckBox("音乐",false);
JCheckBox jcb2 = new JCheckBox("视频",false);
JCheckBox jcb3 = new JCheckBox("游戏",false);
JCheckBox jcb4 = new JCheckBox("网课",true);
jp.add(jcb1);
jp.add(jcb2);
jp.add(jcb3);
jp.add(jcb4);
//下拉列表
String[] item = {"--请选择你的学历--","高中","专科","本科","研究生"};
JComboBox jcbb = new JComboBox(item);
jcbb.addItem("博士"); //与在数组中添加列表相同
jp.add(jcbb);
//菜单
JMenuBar jmb = new JMenuBar(); //菜单条
JMenu jm1 = new JMenu("菜单1"); //菜单
JMenu jm2 = new JMenu("菜单2"); //菜单
JMenuItem jmi1 = new JMenuItem("二级菜单1"); //菜单项
JMenuItem jmi2 = new JMenuItem("二级菜单2"); //菜单项
JMenuItem jmi3 = new JMenuItem("二级菜单3"); //菜单项
jm1.add(jmi3); //给菜单1添加菜单项
jm2.add(jmi1); //给菜单2添加菜单项
jm2.add(jmi2);
jmb.add(jm1); //将菜单添加进菜单条
jmb.add(jm2);
jp.add(jmb);
//文本组件
JTextField jtf = new JTextField("请输入账号",20);
jp.add(jtf);
//密码框组件
JPasswordField jpw = new JPasswordField("请输入密码",20);
jpw.setEchoChar('*');
jp.add(jpw);
//文本域组件
JTextArea jta = new JTextArea("请输入文字",10,10);
jta.setLineWrap(true);
jp.add(jta);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)