继承JFrame
方法:
public class FramePanel extends JFrame {
public FramePanel() throws HeadlessException {
this.setTitle("Hello World");//设置标题
this.setSize(500,500);//设置宽高
this.setLocationRelativeTo(null);//水平垂直居中 设置相对位置
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口时退出程序 设置默认关闭操作
this.setResizable(false);//设置禁止窗口拖拽 设置可改变的窗口size
this.setVisible(true);//让窗口显示 设置可视化的
}
public static void main(String[] args) {
new FramePanel();//创建一个新窗口
}
}
setVisible一般放在最后一行,这样前面的操作完后才能显示
面板:在窗口上展示的部分
//创建一个面板
JPanel jPanel=new JPanel();
jPanel.setBackground((new Color(123,123,123)));//设置背景
//把面板添加到窗口
this.add(jPanel);
面板组件可以设置布局管理方式:布局管理器
FlowLayout:流式布局 也是面板默认布局
把组件放在一排,从左到右排放,一行占满后,重新开一行
eg1:
public class DemoFame extends JFrame {
public DemoFame() throws HeadlessException {
this.setTitle("Hello World");
this.setSize(500,500);//设置宽高
this.setLocationRelativeTo(null);//水平垂直居中 设置相对位置
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口时退出程序 设置默认关闭操作
this.setResizable(false);//设置禁止窗口拖拽 设置可改变的窗口size
JPanel jPanel1=new JPanel(new FlowLayout(FlowLayout.LEFT));//设置内容水平对齐方式
JButton jButton1=new JButton("按钮1");
JButton jButton2=new JButton("按钮2");
//把按钮添加到面板
jPanel1.add(jButton1);
jPanel1.add(jButton2);
//把面板添加到窗口
this.add(jPanel1);
this.setVisible(true);//让窗口显示 设置可视化的
}
public static void main(String[] args) {
new DemoFame();//创建一个新窗口
}
}
eg2:
JPanel jPanel2=new JPanel(new FlowLayout(FlowLayout.LEFT,200,50));//设置内容水平对齐方式
JButton jButton1=new JButton("按钮1");
JButton jButton2=new JButton("按钮2");
//把按钮添加到面板
jPanel2.add(jButton1);
jPanel2.add(jButton2);
public static void main(String[] args) {
new DemoFame();//创建一个新窗口
}
}
总共有五个区域,每个区域可以放置一个组件,并且占满整个区域
中间区域是必须的,其他四个区域根据需要
添加组件式,可以绑定组件的位置,如果不限定,默认在中间
//创建面板边界布局的面板
JPanel jPanel=new JPanel(new BorderLayout());
JButton jButton1=new JButton("按钮1");
JButton jButton2=new JButton("按钮2");
JButton jButton3=new JButton("按钮3");
JButton jButton4=new JButton("按钮4");
JButton jButton5=new JButton("按钮5");
//把按钮添加到面板
jPanel.add(jButton1,BorderLayout.NORTH);
jPanel.add(jButton2,BorderLayout.SOUTH);
jPanel.add(jButton3,BorderLayout.WEST);
jPanel.add(jButton4,BorderLayout.EAST);
jPanel.add(jButton5,BorderLayout.CENTER);
public static void main(String[] args) {
new DemoFrame();//创建一个新窗口
}
}
网格类似于一个表格,可以设置行数和列数
每个网格中只能放一个组件,占整个区域
从第一行开始放,第一行占满后,开启第二行
//创建网格布局的面板
JPanel jPanel=new JPanel(new GridLayout());
JButton jButton1=new JButton("按钮1");
JButton jButton2=new JButton("按钮2");
JButton jButton3=new JButton("按钮3");
JButton jButton4=new JButton("按钮4");
JButton jButton5=new JButton("按钮5");
//把按钮添加到面板
jPanel.add(jButton1);
jPanel.add(jButton2);
jPanel.add(jButton3);
jPanel.add(jButton4);
jPanel.add(jButton5);
用来放文本,图片等
//创建一个面板
JPanel jPanel=new JPanel();
//创建标签
JLabel jLabel=new JLabel("你好");//label标签
jLabel.setFont(new Font("横体",Font.BOLD,20));//font字体 bold黑体的,醒目的
jLabel.setForeground(new Color(27,147,27));//设置字体颜色
//把标签放在面板上
jPanel.add(jLabel);
//单行文本框组件 设置列数 列宽
JTextField jTextField=new JTextField(15);// column:列
jTextField.getText();//获得文本框中的内容
//把标签放在面板上
jPanel.add(jLabel);
jPanel.add(jTextField);//把文本框添加到面板上
//多行文本框组件(文本域)
JTextArea jTextArea=new JTextArea(5,20);//5行20列的文本域
jTextArea.setLineWrap(true);//设置强制换行
//带滚动条的 把多行文本框组件加起来
JScrollPane j=new JScrollPane(jTextArea);
jPanel.add(j);//把j添加进面板
//把标签放在面板上
//jPanel.add(jLabel);
JLabel passwordjLabel =new JLabel("密码");
JPasswordField jPasswordField=new JPasswordField(15);//设置密码文本框
char[] password=jPasswordField.getPassword();//返回char数组,获得输入的密码
String s=new String(password);//把char从转换成string
jPanel.add(passwordjLabel);
jPanel.add(jPasswordField);
//按钮
JButton jButton=new JButton("登录");//设置按钮
jButton.setEnabled(false);//禁用按钮
jButton.setToolTipText("点击登录");//鼠标悬浮在按钮上有提示
jPanel.add(jButton);//添加按钮
菜单就是窗口上方的功能
//菜单栏
JMenuBar jMenuBar=new JMenuBar();//创建菜单栏
//创建菜单
JMenu jMenu1=new JMenu("文件");
JMenu jMenu2=new JMenu("编辑");
JMenu jMenu3=new JMenu("帮助");
//把菜单加到菜单栏
jMenuBar.add(jMenu1);
jMenuBar.add(jMenu2);
jMenuBar.add(jMenu3);
//创建菜单项
JMenuItem jMenuItem1=new JMenuItem("新建");
JMenuItem jMenuItem2=new JMenuItem("另存为");
JMenuItem jMenuItem3=new JMenuItem("保存");
JMenuItem jMenuItem4=new JMenuItem("打开");
JMenuItem jMenuItem5=new JMenuItem("插入");
JMenuItem jMenuItem6=new JMenuItem("停止");
JMenuItem jMenuItem7=new JMenuItem("debug");
JMenuItem jMenuItem8=new JMenuItem("启动");
JMenuItem jMenuItem9=new JMenuItem("关于我们");
//把菜单项加到菜单
jMenu1.add(jMenuItem1);
jMenu1.add(jMenuItem2);
jMenu1.add(jMenuItem3);
jMenu1.add(jMenuItem4);
jMenu2.add(jMenuItem5);
jMenu2.add(jMenuItem6);
jMenu2.add(jMenuItem7);
jMenu2.add(jMenuItem8);
jMenu3.add(jMenuItem9);
//把菜单栏添加到窗口
this.setMenuBar(jMenuBar);
this.setVisible(true);//让窗口显示 设置可视化的
对面板上的各种部件,当鼠标点击时需要做出相应的回应,这种交互便是事件处理,当按到相应的部件,做出相应的事件控制是十分有必要的,这样一个程序才能 “活” 起来
事件处理需要监听器,当监听到哪个部件被按到时,执行对应操作
//new个接口 创建一个匿名内部类,不用每次创建内部类
//为按钮添加监听器,当被按时,监听到,执行方法
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("按钮被点击了");
}
});
每点击一次按钮就会输出一下"按钮被点击了"
//为按钮添加监听器
jButton.addMouseListener(new MouseAdapter() {
@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("鼠标移入到标签上");
}
});
/*
鼠标移入标签上
鼠标移入到标签上
鼠标移入标签上
鼠标按下
鼠标释放
鼠标点击触发
鼠标按下
鼠标释放
鼠标点击触发
鼠标移入到标签上
*/
//创建一个文本框的监听器
//Adapter适应器
jTextField.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
//getkeycode得到输入的一个字符,,,getkeycode得到这个字符编码
System.out.println("输入了一次"+e.getKeyChar()+":"+e.getKeyCode());
}
});
/*
输入了一次:16
输入了一次a:65
输入了一次d:68
输入了一次a:65
输入了一次d:68
输入了一次f:70
*/
jButton2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//confirm确定 JOptionPane.OK_CANCEL_OPTION添加确定或取消选项,确定返回0,取消返回2
JOptionPane.showConfirmDialog(null,"您确定要退出吗?","操作提示",JOptionPane.OK_CANCEL_OPTION);
}
});
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//获得文本框输入的内容
String account=jTextField.getText();
if(account.length()==0){
//警告窗口
//pane窗格 dialog对话 title给警告窗口加标题 给窗口加警告图标JOptionPane.ERROR_MESSAGE
JOptionPane.showMessageDialog(null,"请输入账号","警告",JOptionPane.ERROR_MESSAGE);
return;
}
}
});