软件交互方式:
1.控制台交互
2.图形化界面交互
java使用的图形类主要在java.awt 与 javax.swing
java.awt 与 javax.swing 的区别?
java,awt 中使用的图形库,使用的是系统的图形库。
java,swing 中使用的图形库,都是sun公司自己实现的。
【非常 依赖系统图形库对java跨平台是非常不好的,所以sun又加入了swing,不再依赖系统库】
组件的类别;
-------------| 容器组件
-------------| 非容器组件
容器类
JFrame窗体
JFrame的默认布局管理器为Borderlayout
new JFrame(“hello world”); 设置不可见的窗体。
设置窗体居中
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension screenSize = toolkit.getScreenSize(); 获取分辨率对象
jFrame.setBounds((int)(dimension.getWidth()-300)/2, (int)(dimension.getHeight()-400)/2, 300, 400);
设置窗体的可见性
jFrame.setVisible(true);
设置窗体关闭事件 :关闭窗口
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Jpanel面板
public static void main(String[] args) throws IOException {
//初始化窗口
JFrame jFrame=getInitFrame(400, 400);
JPanel jPanel=new JPanel();
jPanel.setBackground(Color.red);
jFrame.add(jPanel);
}
JDialog对话框
(比较难用)
JOptionPane对话框
//创建对话框
//消息对话框
JOptionPane.showMessageDialog(jFrame, “m名”, “12”, JOptionPane.INFORMATION_MESSAGE);
//警告对话框
JOptionPane.showMessageDialog(jFrame, “mw”, “11”, JOptionPane.WARNING_MESSAGE);
//错误对话框
JOptionPane.showMessageDialog(jFrame, “mw”, “11”, JOptionPane.ERROR_MESSAGE);
//输入框
JOptionPane.showInputDialog(“12”);
//确认框
JOptionPane.showConfirmDialog(jFrame, “23”, “11”, JOptionPane.YES_NO_OPTION);
public static void main(String[] args) throws IOException {
//初始化窗口
JFrame jFrame=getInitFrame(400, 400);
//创建对话框
//消息对话框
JOptionPane.showMessageDialog(jFrame, "m名", "12", JOptionPane.INFORMATION_MESSAGE);
//警告对话框
JOptionPane.showMessageDialog(jFrame, "mw", "11", JOptionPane.WARNING_MESSAGE);
//错误对话框
JOptionPane.showMessageDialog(jFrame, "mw", "11", JOptionPane.ERROR_MESSAGE);
//输入框
JOptionPane.showInputDialog("12");
//确认框
JOptionPane.showConfirmDialog(jFrame, "23", "11", JOptionPane.YES_NO_OPTION);
}
文件对话框
public static void main(String[] args) throws IOException {
//初始化窗口
JFrame jFrame=getInitFrame(400, 400);
FileDialog fileDialog=new FileDialog(jFrame,"请选择打开的文件",FileDialog.LOAD);
fileDialog.setVisible(true);
System.out.println(fileDialog.getFile());
FileDialog fileDialog2=new FileDialog(jFrame,"请选择保存的路径",FileDialog.SAVE);
fileDialog2.setVisible(true);
System.out.println("文件所在目录:"+fileDialog2.getDirectory());
System.out.println("文件名:"+fileDialog2.getFile());
}
非容器类
常用组件
public static void main(String[] args) throws IOException {
//初始化窗口
JFrame jFrame=getInitFrame(400, 400);
//面板
JPanel jPanel=new JPanel();
jFrame.add(jPanel);
//jPanel.setBackground(Color.pink);
//用户名
JLabel nameLable=new JLabel("用户名");
//用户名输入框
JTextField nameField=new JTextField(15);
jPanel.add(nameLable);
jPanel.add(nameField);
//密码
JLabel passWordLable=new JLabel("密码");
JPasswordField password=new JPasswordField(15);
jPanel.add(passWordLable);
jPanel.add(password);
//性别----》》 单选框
JLabel sexLable=new JLabel("性别");
JRadioButton woman=new JRadioButton("女",true);
JRadioButton man=new JRadioButton("男");
//单选框一定要分组
ButtonGroup group=new ButtonGroup();
group.add(man);
group.add(woman);
jPanel.add(man);
jPanel.add(woman);
//来自城市 ---》下拉框
JLabel city=new JLabel("来自城市");
JComboBox citys=new JComboBox<>(new String[] {"北京","上海","杭州"});
jPanel.add(city);
jPanel.add(citys);
//兴趣爱好 --->> 复选框
JLabel ho=new JLabel("兴趣爱好");
JCheckBox checkBox=new JCheckBox("篮球",true); //默认选中
JCheckBox checkBox2=new JCheckBox("java2");
JCheckBox checkBox3=new JCheckBox("java3");
jPanel.add(ho);
jPanel.add(checkBox);
jPanel.add(checkBox2);
jPanel.add(checkBox3);
//个人简介----》
JLabel personC=new JLabel("个人简介");
JTextArea per=new JTextArea(5, 5);
per.setLineWrap(true);//设置自动换行
jPanel.add(personC);
jPanel.add(per);
}
菜单组件
菜单条(MenuBar) 、菜单(Menu)、菜单项 (MenuItem)
菜单条添加菜单。
菜单添加菜单项。
复选菜单:
首先菜单添加菜单。菜单添加菜单项。
public class FrameUtil {
public static void main(String[] args) throws IOException {
JFrame jFrame=new JFrame("Nodepad");
initFrame(jFrame, 600, 450);
//菜单条
JMenuBar jMenuBar=new JMenuBar();
//菜单
JMenu fileJMenu=new JMenu("文件");
JMenu editorJMenu=new JMenu("编辑");
JMenu switchMenu=new JMenu("切换工作目录");
//菜单项
JMenuItem openItem=new JMenuItem("open");
JMenuItem closeItem=new JMenuItem("close");
JMenuItem aboutItem=new JMenuItem("about");
JMenuItem nowItem=new JMenuItem("001");
JMenuItem historyItem=new JMenuItem("002");
//文本项
JTextArea area=new JTextArea(600,400);
area.setLineWrap(true);//换行
//布局
jFrame.add(jMenuBar,BorderLayout.NORTH);
jFrame.add(editorJMenu,BorderLayout.CENTER);
jMenuBar.add(fileJMenu);
jMenuBar.add(editorJMenu);
//菜单添加菜单项
fileJMenu.add(openItem);
fileJMenu.add(closeItem);
editorJMenu.add(aboutItem);
//菜单添加菜单,然后菜单添加菜单项 。复选菜单
switchMenu.add(nowItem);
switchMenu.add(historyItem);
fileJMenu.add(switchMenu);
}
public static void initFrame(JFrame jFrame,int width,int height) {
//设置窗体居中
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension dimension = toolkit.getScreenSize();
jFrame.setBounds((int)(dimension.getWidth()-300)/2, (int)(dimension.getHeight()-400)/2, 300, 400);
//设置可见
jFrame.setVisible(true);
//设置关闭事件
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
布局管理器
布局管理器就是用于指定组件的摆放位置。
每种布局管理器都有自己的摆放风格。
BorderLayout(边框布局管理器)
摆放的风格是:上北 、 下南、 左西、 右东 、 中
注意事项:
1.使用BorderLayout时添加组件时,如果没有指定添加的方法,则默认添加在中间位置。
2.使用Borderout的时候,如果东南西北哪个方向没有组件,那么中间位置的组件就会占据那个位置。
3.JFrame容器默认的布局管理器就是BorderLayout
public class App {
public static void main(String[] args) {
JFrame jFrame=new JFrame("hello");
init(jFrame, 500, 400);
BorderLayout borderLayout=new BorderLayout();
jFrame.add(new Button("bei"),BorderLayout.NORTH);
jFrame.add(new Button("bei"),BorderLayout.SOUTH);
jFrame.add(new Button("bei"),BorderLayout.EAST);
jFrame.add(new Button("bei"),BorderLayout.WEST);
}
public static void init(JFrame jFrame,int width,int height) {
Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
Dimension dimension = defaultToolkit.getScreenSize();
jFrame.setBounds((int)(dimension.getWidth()-width)/2, (int)(dimension.getHeight()-width)/2, width, height);
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
流式布局管理器(FlowLayout)
注意事项:
1.默认居中对齐。
2.JPanel面板默认的布局管理器就是FlowLayout
public class App {
public static void main(String[] args) {
JFrame jFrame=new JFrame("hello");
init(jFrame, 500, 400);
FlowLayout layout=new FlowLayout(FlowLayout.LEFT,0,50);//指定对齐的方式,默认居中。0:元素与元素的水平距离;50:元素与元素之间的垂直距离
jFrame.setLayout(layout);
jFrame.add(new Button("bei"));
jFrame.add(new Button("bei"));
jFrame.add(new Button("bei"));
jFrame.add(new Button("bei"));
jFrame.add(new Button("bei"));
}
public static void init(JFrame jFrame,int width,int height) {
Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
Dimension dimension = defaultToolkit.getScreenSize();
jFrame.setBounds((int)(dimension.getWidth()-width)/2, (int)(dimension.getHeight()-width)/2, width, height);
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
表格布局管理器(GridLayout)
public class App {
public static void main(String[] args) {
JFrame jFrame=new JFrame("hello");
init(jFrame, 500, 400);
GridLayout layout=new GridLayout(4,2);//指定对齐的方式,默认居中。0:元素与元素的水平距离;50:元素与元素之间的垂直距离
jFrame.setLayout(layout);
jFrame.add(new Button("bei"));
jFrame.add(new Button("bei"));
jFrame.add(new Button("bei"));
jFrame.add(new Button("bei"));
jFrame.add(new Button("bei"));
}
public static void init(JFrame jFrame,int width,int height) {
Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
Dimension dimension = defaultToolkit.getScreenSize();
jFrame.setBounds((int)(dimension.getWidth()-width)/2, (int)(dimension.getHeight()-width)/2, width, height);
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
卡片布局管理器(CardLayout)
事件
事件:当发生某个事件时,都有对应的解决方案。
事件、事件源 、 监听器、处理方式
按钮动作事件监听器
对于鼠标点击和空格键都起作用
public static void main(String[] args) {
JFrame jFrame=new JFrame("hello");
init(jFrame, 500, 400);
JButton button=new JButton("12");
jFrame.add(button,BorderLayout.NORTH);
//动作时间监听器 ==》对于鼠标点击和空格键都会起作用
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//获取事件源
JButton source = (JButton) e.getSource();
source.setText("123123s");
}
});
}
public static void init(JFrame jFrame,int width,int height) {
Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
Dimension dimension = defaultToolkit.getScreenSize();
jFrame.setBounds((int)(dimension.getWidth()-width)/2, (int)(dimension.getHeight()-width)/2, width, height);
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
鼠标事件监听器
MouseListener
public class App {
public static void main(String[] args) {
JFrame jFrame=new JFrame("hello");
init(jFrame, 500, 400);
JButton button=new JButton("12");
jFrame.add(button,BorderLayout.NORTH);
//鼠标事件监听器
button.addMouseListener(new MouseListener() {
//鼠标松开的时候触发
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
//鼠标点下的时候触发
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
//鼠标移出的时候触发
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
//鼠标进入的时候触发
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
//鼠标单机击的时候触发
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
});
}
public static void init(JFrame jFrame,int width,int height) {
Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
Dimension dimension = defaultToolkit.getScreenSize();
jFrame.setBounds((int)(dimension.getWidth()-width)/2, (int)(dimension.getHeight()-width)/2, width, height);
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
我只是想调用一个方法,却实现那么多的方法。解决方案使用鼠标事件的适配器
public class App {
public static void main(String[] args) {
JFrame jFrame=new JFrame("hello");
init(jFrame, 500, 400);
JButton button=new JButton("12");
jFrame.add(button,BorderLayout.NORTH);
//鼠标事件适配器。用哪一个方法,就重写哪一个[双击事件]
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int clickCount = e.getClickCount();
if(clickCount==2) {
System.out.println("...");
}
}
});
}
public static void init(JFrame jFrame,int width,int height) {
Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
Dimension dimension = defaultToolkit.getScreenSize();
jFrame.setBounds((int)(dimension.getWidth()-width)/2, (int)(dimension.getHeight()-width)/2, width, height);
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
键盘事件监听器
KeyListener
public static void main(String[] args) {
JFrame jFrame=new JFrame("hello");
init(jFrame, 500, 400);
JButton button=new JButton("12");
jFrame.add(button,BorderLayout.NORTH);
button.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
}
});
}
使用键盘监听器,不想实现那么多方法,所以使用keyAdapet
public class App {
public static void main(String[] args) {
JFrame jFrame=new JFrame("hello");
init(jFrame, 500, 400);
JButton button=new JButton("12");
jFrame.add(button,BorderLayout.NORTH);
button.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
JButton source = (JButton) e.getSource();
source.setText(e.getKeyCode()+"");
}
});
}
public static void init(JFrame jFrame,int width,int height) {
Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
Dimension dimension = defaultToolkit.getScreenSize();
jFrame.setBounds((int)(dimension.getWidth()-width)/2, (int)(dimension.getHeight()-width)/2, width, height);
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}