首页 > 技术文章 > 图形界面2

hcjk12580 2019-12-21 17:45 原文

 

图形界面

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.setVisibleRowcount(3);设置默认可见长度

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(); 间隔

image-20191217210838639

键盘事件

        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();刷新窗口

推荐阅读