Java GUI基本知识点

1.重要类的位置
(1)Java.awt.geom 中包含了集合图形Ellipse2D、Line2D、Point2D、Rectangle2D。(注意每个2D类都有Float和Double两种,经常用Double)
(2)java.awt.Graphics 是在Panel中绘制图形的类,可以绘制String文本、Graphics2D绘制几何图形(g2.draw());
2.在实现paintComponent(Graphics g)是别忘了调用super.paintComponent(g);
3.设置颜色:
g2.setPaint(Color.*); //设置Graphics2D以后绘制的图像的颜色,
panel.setBackground(Color.*);
4.设置字体:
Font font=new Font("字体名",Font.BOLD|Font.ITALIC,size); 
g2.setFont(font);//接下来的字符串会按照这个字体。
label.setFont(font);//把label的字体变换


FontRenderContext context=g2.getFontRenderContext();
Rectangle2D bounds=font.getStringBounds("...",context);//得到字符串外围的矩形
bounds.getWidth()和bounds.getHeight()获得字体的宽和高
-bounds.getY()获得上坡度
注意:知道上坡度、下坡度、基线等概念。
目的:在g2.drawString()时能够确定位置。
5.显示图像:
Image image=ImageIO.read(new File("..."));
g.drawImage(image,x,y,width,height,null);
6.event.getSource()获得事件源(但是类型是Object) 
**getActionCommand();//不用
7.javax.swing.UIManager负责外部观感UIManager.setLookAndFeel(String)设置
8.repaint()可以更新屏幕
9.键盘事件:
(1)KeyListener包含
KeyPressed(按下一瞬间的事件,表示虚拟键码即捕捉按键),能够调用e.getKeyCode()返回虚拟键码,e.isShiftDown()等检测是否按下shift。
KeyTyped(一直按着时的事件,表示在屏幕上出现的真实字符,如果按shift+a,则会为A),e.getKeyChar()返回真实字符
KeyReleased(放开一瞬间的事件)
(2)panel默认是不接受键盘事件的,需要在panel构造函数最后加setFocusable(true);激活
10.鼠标事件:
(1)鼠标事件有3个监听器
MouseListener:有MousePressed(按下鼠标瞬间的事件),MouseReleased(松开鼠标瞬间的事件),MouseClicked(主要是调用e.getClickCount()获得鼠标点击次数)
MouseMotionListener:MouseMoved(鼠标平常移动),MouseDragged(鼠标按下后移动)
MouseWheelListener:MouseWheelMoved(鼠标滚轮移动)
(2)MouseEvent可以调用e.getX(),e.getY()返回鼠标的位置
(3)应用:实现画图板。
11.焦点事件:
(1)监听器FocusListener包含
FocusGained()
FocusLosted()
(2)FocusEvent可以调用getOppositeComponent()获得对等组件,getComponent()返回获得或失去焦点的组件
**12动作:
(1)Action是扩展与ActionListener的接口,被AbstractAction实现。
(2)Action方法putValue(Strng key,Object value):这个方法可以在预先放置key-value对,由getValue(String key)获得
预定义的key中我认为最有用的也只有SHORT_DESCRIPTION,他的作用是当鼠标移到比如button上时,会显现一个简介,这就是SHORT_DESCRIPTION的作用。
13.多点传送即一个组件引发多个监听器,比如按钮A会关闭打开的a,b,c窗口,则在创建a,b,c窗口时,需要同时将关闭监听器注册。
14.流布局管理器:默认的panel布局
panel.setLayout(new FlowLayout(FlowLayout.LEFT|FlowLayout.RIGHT|FlowLayout.CENTER));
如果是LEFT,则把组件从左到右放置,直到第一行没空间,再第二行从左向右。
15.边界布局管理器:默认JFrame布局,将一个frame分为SOUTH,WEST,CENTER,EAST,CENTER,如果放到SOUTH,则会把组件填充到全部SOUTH区域,即会变形。
add(*,BorderLayout.SOUTH);
16.网格布局:如果2*2的网格,最好一定要把2*2填满,因为不填满的话,例如如果只填了2个,则这2个会把所有2*2的区域都撑满。
panel.setLayout(new GridLayout(row,col));
把一个panel等分,变成一个网格,用组件进行填充。
应用:计算器。
综合:我们可以把panel进行嵌套,因为流布局只能从上到下进行摆放,而边界只能在5个位置摆放并且会使组件变形,因此可以进行结合。
17.文本域:JTextField
f.getText(); //返回f中的字符串
f.setEditable(boolean);//是否可编辑
   标签:JLabel 用于标识
   文本监听器:DocumentListener:随时监听文本域的动态。包含3个函数
insertChanged(DocumentEvent e);//插入文本时触发
removeChanged(DocumentEvent e);//删除文本时触发
updateChanged(DocumentEvent e);//不用
    应用:f.getDocument().addDocumentListener(...);
18.密码域:JPasswordField 
getPassword();返回char[]即真实的文本
19.文本区:JTextArea
area.append(String)加到文本区尾部
area.setLineWrap(boolean); 如果为true,则类似于记事本的自动换行。
ctrl+c ctrl+v在文本区默认适用,不需实现
通常在使用文本区时需要把文本区放入JScrollPane,使得视图中显示不下会自动弹出滚动   JScrollPane a=new JScrollPane(textArea);
20.复选框JCheckBox    box.isSelected()检查是否选择
21.单选框JRadioButton
可以把JRadioButton加入ButtonGroup,在一个ButtonGroup中只有一个单选按钮能被选中 
group.add(radiobutton);
22.边界:建议选定一种一直使用,因为目的是把某些组件归在一起作为一组。个人比较喜欢titledBorder,因为能够写明组名,看起来很清楚。
Border border=BorderFactory.createEtchedBorder();
Border title=BorderFactory.createTitledBorder(border,"....");
panel.setBorder(title);
23.下拉列表JComboBox
comboBox.addItem("...");//插入下拉列表
comboBox.removeItem("...");//从下拉列表中移除
String str=(String)comboBox.getSelectedItem(); //获得选中的项的字符串
24.菜单
JMenuBar菜单栏    frame.setJMenuBar(menuBar);
JMenu 菜单对象     menuBar.add(menu);
JMenuItem菜单项   menu.add(menuItem);     JMenuItem可以添加图标  JMenuItem i=new JMenuItem(String,new ImageIcon("..."));
JCheckBoxMenuItem多选框菜单项   menuItem.add(checkboxmenuItem);
JRadioButtonMenuItem单选框菜单项  需要有ButtonGroup
JMenu m1;  JMenu m2;    m1.add(m2);可以添加子菜单
menu.addSeperator(); //添加分割线
25.图形化开发IDE选择:
(1)Eclipse windows builder插件中包含SWT designer和Swing designer,感觉不是很适合菜鸟。
(2)Netbeans 默认已经支持GUI,而且只需要像C#一样拖控件,设计方面就不需要,只需要把事件的代码写上就可以了。http://netbeans.org/kb/docs/java/quickstart-gui.html
26.弹出式菜单JPopupMenu:鼠标右击后弹出的菜单
添加JMenuItem, popupMenu.add(JMenuItem);
在panel上右键弹出菜单   panel.setComponentPopupMenu(popup);
27.快捷键和加速器
(1)快捷键
在JMenu中添加快捷键   menu.setMnemonic('.');
在JMenuItem中添加快捷键    JMenuItem item=new JMenuItem("...",快捷键字符串);
(2)加速器 在不打开菜单的情况下直接触发事件    只能应用与菜单项而不是菜单
item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));  设置加速器ctrl+o
28.启用禁用菜单项
提供了MenuListener监听器,,这类似于在菜单项中添加ActionListener,有以下三个方法
(1)menuSelected(MenuEvent e);    在菜单显示之前调用。
**(2)menuDeselected(MenuEvent e);
**(3)menuCanceled(MenuEvent e);
29.工具栏JToolBar   适用于边界布局
JToolBar bar=new JToolBar(String name,SwingConstants.VERTICAL);
bar.add(button);
frame.add(bar,BorderLayout.NORTH);
bar.addSeperator();
   工具提示 每个组件都有setToolTipText(); 这样我们可以完全摆脱Action,完全使用ActionListener。
30.对话框JOptionPane 由图标、按键类型组成。
对话框有4种类型:
(1)showMessageDialog();//显示一条message并等待用户点击ok
(2)showConfirmDialog();//显示一条message,按键有ok/cancel.    返回被选中的按键可能是JOptionPane.OK_OPTION|JOptionPane.CANCEL_OPTION|JOptionPane.CLOSED_OPTION
(3)showInputDialog();//提供一个输入,并返回给用户。     返回用户输入的字符串
**(4)showOptionDialog()
图标有5种选择:
(1)ERROR_MESSAGE
(2)INFORMATION_MESSAGE
(3)WARNING_MESSAGE
(4)QUESTION_MESSAGE
(5)PLAIN_MESSAGE
31.
模式对话框:这个对话框弹出后只能操作这个对话框。
非模式对话框:这个对话框弹出后也能操作其他对话框。
自定义对话框 JDialog   默认不显示需要setVisible(true);   在初始化时需要确定父组件。
操作JDialog类似于JFrame,运用边界布局,通过add(...)加入组件。
32.文件对话框JFileChooser
(1)初始化 JFileChooser chooser=new JFileChooser();  一开始不需要设置父组件
(2)设置当前目录 chooser.setCurrentDirectory(new File("."));
(3)如果能够一次打开多个文件 chooser.setMultiSelectionEnabled(true);
(4)默认只能选择文件,可以设置选择目录等 chooser.setSelectionMode(JFileChooser.DIRECTORIES_ONLY|...);
(5)
chooser.showOpenDialog(parent); 显示,返回APPROVE_OPTION|CANCEL_OPTION|ERROR_OPTION 即用户选择了哪个按钮
chooser.showSaveDialog(parent); 显示,返回APPROVE_OPTION|CANCEL_OPTION|ERROR_OPTION 即用户选择了哪个按钮
(6)chooser.getSelectedFile().getPath(); 是选择的文件的路径
(7)文件过滤器FileFilter,设置在文件对话框中出现的文件的类型 因为这是抽象类,所以需要继承。
包含两个方法:
accept(File f);是否接受,通常需要比较文件的后缀是否符合。
getDescription(); 在All files那栏中显示的简洁描述。
chooser.addChoosableFileFilter(new filefilter()); //添加过滤器

 

32.在Java中,键盘输入、鼠标点击或者应用程序本身产生的请求会被封装成一个事件,放进一个事件队列中,java.awt.EventQueue对象负责从这个队列中取出事件并派发它们。而EventQueue的派发有一个单独的线程管理,这个线程叫做事件派发线程(Event Dispatch Thread),也就是EDT。此外,Swing的绘制请求也是通过EDT来派发的。

你可能感兴趣的:(Java,GUI)