您的位置:首页 > 产品设计 > UI/UE

黑马程序员---java学习笔记之GUI

2014-01-11 22:07 591 查看
1、GUI,图像用户接口,是与命令行的交互模式相区别的。

2、java中有两个GUI的包,一个是java.Awt,另一个是javax.Swing.

3、java.Awt比较依赖于平台,意思是说,用该包做出来的界面风格与操作系统平台是有关系的,windows下和linux下是有些细微差别的,属于重量级组件,而javax.Swing包做出的界面什么样的就是什么样,不会随着操作系统平台的不同而不同,属于轻量级组件。

4、AWT包中主要类的层级关系:

Component

|---Container

|---Window

|---Frame

|---Dialog

|---FileDialog

|---Panel

|---Button

|---Checkbox

|---Label

|---TextComponent

|---TextField

|---TextArea

5、Container作为一个组件,本身也可以通过add方法添加组件。

6、布局管理器有:流式布局,边界式布局,网格布局,网格包式布局,卡片式布局,坐标式布局。

7、一个窗体可以使用多个形式的布局管理器,这可以通过面板(Panel)实现,每个面板可以使用一种布局管理器。

8、事件监听机制:

a):事件源

b):事件

c):监听器

d):事件处理

9、监听器结尾都是listener。

10、窗体事件----关闭

Frame f = new Frame("myFrameDemo");
f.setLocation(300,200);
f.setSize(500,400);

f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});

f.setVisible(true);
11、窗口监听器WindowListener 的方法windowActivated,在被操作窗口处于最前端时即被调用;而方法windowOpened方法是在被操作窗口刚被打开时会被调用。

12、给某按钮添加监听器

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class FrameButtonDemo {

/**
*该程序的写法把图形用户组件的操作放在了init()方法中,把事件写在了myEvent方法中
*这种分开的写法可以使程序看起来更有条理性。
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

new FrameButton();
}

}
class FrameButton
{
private Frame f;
private Button b;
FrameButton()
{
init();
}

void init()
{
f = new Frame("My Frame");
f.setBounds(300,100,500,400);

f.setLayout(new FlowLayout());
b = new Button("按钮1");
f.add(b);

myEvent();

f.setVisible(true);
}
void myEvent()
{
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println(e.toString());
System.exit(0);
}
});
}

}

13、给按钮添加活动监听器ActionListener和给按钮添加鼠标事件监听器MouseListener,事件触发监听器时,后者的处理函数先被执行。示例如下:

b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("action");
}
});

b.addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
System.out.println("mouse");
}
});
打印结果是mouse(换行)action

14、鼠标双击事件捕获并处理

b.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
//间隔较短的双击可被捕获,间隔较大的双击(可视为两次独立的单击)则不能被捕获
//这说明双击和两次单击是有点儿区别的。
if( e.getClickCount() == 2 )
System.out.println("双击被捕获");
}
});
15、

b.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
//某个键的名字是单个字符时,可以通过KeyEvent类中的getKeyChar方法获取
System.out.println(e.getKeyChar()+"..."+e.getKeyCode());

//某个键的名字是多个字符时就要通过getKeyText方法获取键名
System.out.println(KeyEvent.getKeyText(e.getKeyCode()));

}
});
16、视频中的例题

import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;

public class TextDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
new FrameText();

}

}
class FrameText
{
private Frame f;
private TextField tf;
private TextArea ta;
private Button b;

FrameText()
{
init();
}
void init()
{
f = new Frame("TextFrameDemo");

f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout());

tf = new TextField(40);
b = new Button("转到");
ta = new TextArea(25,70);

f.add(tf);
f.add(b);
f.add(ta);

myEvent();

f.setVisible(true);

}
private void myEvent()
{
//窗体事件---关闭
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});

//鼠标事件---按下
b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String strTemp = tf.getText();
File file = new File(strTemp);

ta.setText("");
if( file.exists() )
{
if( !file.isDirectory() )
ta.append(f.toString()+"\r\n");
else
process(file,0);

tf.setText("");
}
else
{
final Dialog d = new Dialog(f,"提示信息",true);
Label l = new Label("输入地址:"+strTemp+"错误!");
Button okb = new Button("确定");

d.setBounds(300,100,240,160);
d.setLayout(new FlowLayout());

d.add(l);
d.add(okb);

d.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
d.setVisible(false);
}
});
okb.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
d.setVisible(false);
}
});

d.setVisible(true);

}
}
});

}
private void process(File dir,int level)
{
File[] files = dir.listFiles();
ta.append(printBlank(level)+dir.getName()+"\r\n");
level++;

for( File file : files )
{
if( file.isDirectory() )
{
process(file,level);
}
else
{
ta.append(printBlank(level)+file.getName()+"\r\n");
}
}

}
private String printBlank(int level)
{
StringBuilder sb = new StringBuilder();
for( int i = 0; i < level; i++ )
sb.append("  ");
sb.append("|---");
return sb.toString();
}
}
17、给一个窗体添加菜单

import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class FrameMenuDemo {

public static void main(String[] args) {

new FrameMenu();
}

}
class FrameMenu
{
private Frame f;
private MenuBar mb;
private Menu m;
private Menu mi0;
private MenuItem mi1;
private MenuItem m1;

FrameMenu()
{
init();
}
void init()
{
f = new Frame("MyFrameMenu");
f.setBounds(300,100,500,400);
f.setLayout(new FlowLayout());

mb = new MenuBar();
m = new Menu("文件");
mi0 = new Menu("子菜单");
mi1 = new MenuItem("退出");
m1 = new MenuItem("子条目");

mb.add(m);
m.add(mi0);
m.add(mi1);
mi0.add(m1);

f.setMenuBar(mb);

myEvent();

f.setVisible(true);
}

void myEvent()
{
f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e)
{
System.exit(0);
}

});
mi1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: