图形界面
setBounds(300,300,300,300); 设置位置和大小
ActionEvent e 事件是由哪个控件发出的, 通通都记录在 ActionEvent 这个对象中
e.getActionCommand();'返回事件源的名字
e.getSource(); 返回这个事件的事件源本身对象 JButton
setHorizontalAlignment(JTextField.RIGHT); 输入框在右边显示
JScrollPane 右边的滚动条
ActionListener 是一个通用的事件, 每一个控件都有这么一个事件, 但是一些控件有自己独立的触发事件
combol(下拉列表) 使用 ActionListener 的缺陷是, 如果当前选中的条目, 再次被选中, 还会触发事件
itemStateChanged 下拉列表条目改变时, 是会触发两次这个方法, 一次是原来的条目, 新的条目被选泽时, 所以一般需要进行判断只有被选择的时候进行操作
- this.setTitle("下拉菜单事件");
- // 设置位置和大小
- this.setBounds(300, 200, 300, 300);
- combo = new JComboBox<>();
- combo.addItem("本科");
- combo.addItem("专科");
- combo.addItem("高中");
- combo.addItem("初中");
- //ActionListener 是一个通用事件, 每一个控件都有这么一个事件
- // 但是一些特殊的控件, 有自己独立的事件方法
- //combo 使用 ActionListener 的缺陷是, 如果当前选中的条目, 再次被选择, 还是会触发事件
- /*combo.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- //System.out.println(((JComboBox)e.getSource()).getSelectedItem());
- System.out.println(combo.getSelectedItem());
- }
- });*/
- combo.addItemListener(new ItemListener() {
- //itemStateChanged 如果下拉菜单条目改变
- // 其实会触发两次这个方法, 一次是原来的条目不选择, 新的条目被选择
- // 所以, 一般需要进行判断, 只是在被选择的时候进行操作
- public void itemStateChanged(ItemEvent e) {
- // 确定状态改变是被选择的状态
- if(e.getStateChange() == ItemEvent.SELECTED) {
- System.out.println(combo.getItemAt(combo.getSelectedIndex()));
- }
- }
- });
- this.add(combo,BorderLayout.NORTH);
- this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- this.setVisible(true);
列表框
JList<E>jlist = new JList<E>();
jlist.setFixedCellHeight(150); 设置每一行的高度
jlist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 设置单选还是多选
- JPanel panel = new JPanel();
- Student s1 = new Student(1,"张三 1",19);
- Student s2 = new Student(2,"张三 2",18);
- Student s3 = new Student(3,"张三 3",17);
- ?
- List<Student> list = new ArrayList<>();
- list.add(s1);list.add(s2);list.add(s3);
- JList<Student> jlist = new JList<>();
- // 设置默认的可见高度... 也就是可见行数, 注意, 要联合滚动条一起使用
- jlist.setVisibleRowCount(3);
- // 设置宽度
- jlist.setFixedCellWidth(150);
- // 设置每一行的高度
- jlist.setFixedCellHeight(50);
- // 设置单选还是多选
- //jlist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
- DefaultListModel<Student> model = new DefaultListModel<>();
- model.addElement(s1);
- model.addElement(s2);
- model.addElement(s3);
- model.addElement(s4);
- model.addElement(s5);
- model.addElement(s6);
- //JList 没有直接往里面放入集合对象的方法或者构造器, 只有一个 setModel 方法
- // 但是这个方法需要的是一个 ListModel 接口对象
- //DefaultListModel 是 ListModel 的实现类, 其实就类似于 ArrayList
- jlist.setModel(model);
- JScrollPane pane = new JScrollPane(jlist);
- JButton btn = new JButton("确定");
- btn.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- List<Student> stus = jlist.getSelectedValuesList();
- for (Student student : stus) {
- model.removeElement(student);
- }
- }
- });
- panel.add(pane);
- panel.add(btn);
- contentPane.add(panel);
表格
- String [] colName = {"编号","姓名","年龄"};
- Object [][] data = {
- {1,"成龙",21},
- {2,"陈龙",22},
- {3,"岑龙",23},
- {4,"程龙",24},
- };
- // 默认要求, 表格应该放在滚动条中
- JTable table = new JTable(data,colName);
- // 滚动条
- JScrollPane scroll = new JScrollPane(table);
- contentPane.add(scroll);
- int n = JOptionPane.showConfirmDialog(null, "你确定要删除吗?","删除确认",JOptionPane.OK_CANCEL_OPTION);
弹出确认消息对话框
1. 对话框的位置, null 默认在屏幕中间
2. 对话框的消息内容
3. 对话框的标题
4. 对话框的提示按钮样式 0 确定 1 取消 以此类推 -1 点了关闭
txtId.setEditable(false); 不可修改, 表示输入框的内容不可修改
鼠标事件
- public MouseFrame() {
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- setBounds(100, 100, 450, 300);
- contentPane = new JPanel();
- contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
- contentPane.setLayout(new BorderLayout(0, 0));
- setContentPane(contentPane);
- lblTxt = new JLabel();
- /*
- contentPane.addMouseListener(new MouseListener() {
- // 鼠标松开的时候触发
- public void mouseReleased(MouseEvent e) {
- lblTxt.setText("鼠标在 x:"+e.getX()+"y:"+e.getY()+"的坐标位置 >> 松开 <<");
- }
- // 鼠标按下的时候触发
- public void mousePressed(MouseEvent e) {
- lblTxt.setText("鼠标在 x:"+e.getX()+"y:"+e.getY()+"的坐标位置 >> 按下 <<");
- }
- // 鼠标离开的时候触发
- public void mouseExited(MouseEvent e) {
- // TODO Auto-generated method stub
- lblTxt.setText("鼠标在 x:"+e.getX()+"y:"+e.getY()+"的坐标位置 >> 离开 <<");
- }
- // 鼠标进入的时候触发
- public void mouseEntered(MouseEvent e) {
- // TODO Auto-generated method stub
- lblTxt.setText("鼠标在 x:"+e.getX()+"y:"+e.getY()+"的坐标位置 >> 进入 <<");
- }
- // 鼠标点击的时候触发
- public void mouseClicked(MouseEvent e) {
- // TODO Auto-generated method stub
- lblTxt.setText("鼠标在 x:"+e.getX()+"y:"+e.getY()+"的坐标位置 >> 点击 <<");
- }
- });
- contentPane.addMouseMotionListener(new MouseMotionListener() {
- // 鼠标移动的时候触发
- public void mouseMoved(MouseEvent e) {
- lblTxt.setText("鼠标在 x:"+e.getX()+"y:"+e.getY()+"的坐标位置 >> 移动 <<");
- }
- // 鼠标拖拽的时候触发
- public void mouseDragged(MouseEvent e) {
- lblTxt.setText("鼠标在 x:"+e.getX()+"y:"+e.getY()+"的坐标位置 >> 拖拽 <<");
- }
- });
- contentPane.addMouseWheelListener(new MouseWheelListener() {
- // 鼠标中间滚轮滚动的时候触发
- public void mouseWheelMoved(MouseWheelEvent e) {
- int n = e.getWheelRotation();
- lblTxt.setText("鼠标在 x:"+e.getX()+"y:"+e.getY()+"的坐标位置 >> 滚轮滚动"+n+"<<");
- }
- });
- */
- //MouseAdapter 其实就是一个实现了所有鼠标接口的抽象类, 起到的作用就是让下面的实现类不至于多实现很多不必要的方法
- contentPane.addMouseListener(new MouseAdapter() {
- // 鼠标点击的时候触发
- public void mouseClicked(MouseEvent e) {
- lblTxt.setText("鼠标在 x:"+e.getX()+"y:"+e.getY()+"的坐标位置 >> 点击 <<");
- }
- });
- contentPane.addMouseWheelListener(new MouseAdapter() {
- // 鼠标中间滚轮滚动的时候触发
- public void mouseWheelMoved(MouseWheelEvent e) {
- int n = e.getWheelRotation();
- lblTxt.setText("鼠标在 x:"+e.getX()+"y:"+e.getY()+"的坐标位置 >> 滚轮滚动"+n+"<<");
- }
- });
- contentPane.add(lblTxt,BorderLayout.SOUTH);
- }
鼠标右键事件
JPopupMenu pop = new JPopupMenu();
右键内容:
JMenuItem itemDelete = new JMenuItem("删除");
pop.add(itemDelete); 添加
pop.addSeparator(); 间隔
键盘事件
- txtInput = new LovoTxt("文本",50,50,contentPane);
- txtInput.addKeyListener(new KeyListener() {
- // 输入一个字是触发
- public void keyTyped(KeyEvent e) {
- // 输入框只能输入数字
- // int n = e.getKeyChar();
- // if(!(n>= KeyEvent.VK_0 && n<= KeyEvent.VK_9)){
- // // 不让按的字添加到框里面
- // e.consume();
- // }
- // 输入框只能输入数字 (char)8 是为了可以删除
- String key = "0123456789" + (char)8;
- if(key.indexOf(e.getKeyChar()) < 0){
- e.consume();
- }
- }
- // 键盘松开时触发
- public void keyReleased(KeyEvent e) {
- }
- // 键盘按下时触发
- public void keyPressed(KeyEvent e) {
- // 输出 ASC 码
- // int n = e.getKeyChar();
- // System.out.println(n);
- // 输出对应的按键
- int n = e.getKeyCode();
- String str = KeyEvent.getKeyText(n);
- System.out.println(str);
- // 所有键盘上的按键, 都有具体的静态常量编码对象 KeyEvent.VK_ENTER
- if(e.getKeyCode() == KeyEvent.VK_ENTER) {
- System.exit(0);
- }
- }
- });
- //KeyAdapter 与 MouseAdapter 一样
- txtInput.addKeyListener(new KeyAdapter() {
- ?
- public void keyPressed(KeyEvent e) {
- }
- });
e.consume(); 不让按的字添加到框里面
repaint(); 刷新窗口
图形界面 2
来源: http://www.bubuko.com/infodetail-3343205.html