1.Java的GUI资源都包含在awt和swing包里,awt对平台有一定的依耐性,swing是新出来的,
扩展性更好,不过swing依赖awt包生存。awt有两个核心类:Component和Container类。
Component指那些可以在屏幕显示的东西,所以Component包含Container,同时还有其他
的小部件,比如Button,TextField。Container又分为Window和Panel,而Window又可分为
Fram和Dialog。
2.创建窗口时可以设置一系列的值,比如窗口背景色,初始位置,大小。不过设完值之后要注
意调用显示方法。Panel不能单独建立,它必须有所依赖,或窗口,或Panel。
对于部件的布局,Frame默认的为BorderLayout,而Panel为FlowLayout,对于部件的布局
常用的方法还有GridLayout。对于不需要Java自带的布局管理器的程序,程序需要设置Layout
的值为null,否则即使代码有对部件的布局,那些代码也会无效,因为这些方法都被Java默认
的布局管理器给覆盖了。
3.消息处理机制,同其他编程一样需要一个监听器去监听你需要监听的操作,然后的话,Java对
于我们熟悉的PC部件都会有相应的适配器,我们要做的就是写一个类继承对应的适配器,然后
重写我们需要的动作即可。
4.Java基础部分到这就学完了,不过由于只是看了些视频,没做练习,没看书,所以对java还不
是很熟悉,所以接下来的事就 是看书,习题来巩固这门编程了。
练习代码:
import java.awt.Color;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.Toolkit;
import java.util.ArrayList;
import javax.swing.plaf.synth.Region;
import org.omg.CORBA.FREE_MEM;
import org.w3c.dom.css.RGBColor;
public class TestGui {
public static void main( String agrs[]){
//Fram
//创建一个窗口,要求中间的Panel正好处于中心,且长宽各为窗口的对应长宽的一半
//效果和下面的类一样,不过这里是通过多个Panel合成的
Frame fr = new Frame("JavaFram");
fr.setResizable(false);
fr.setSize(800, 600);
fr.setLayout(null);
//fr.setBackground(Color.yellow); //这个不能设置,否则就结果就全是该颜色了
fr.setVisible(true);
fr.setLocation(300,50);
new MyPanel(fr, 0, 0, fr.getWidth(), fr.getHeight()/4, Color.blue );
new MyPanel(fr, 0, fr.getHeight()/4, fr.getWidth()/4, fr.getHeight()/2, Color.blue );
new MyPanel(fr, 0, 3*fr.getHeight()/4, fr.getWidth(), fr.getHeight()/4, Color.blue );
new MyPanel(fr,3* fr.getWidth()/4, fr.getHeight()/4, fr.getWidth()/4, fr.getHeight()/2, Color.blue );
new MyPanel(fr, fr.getWidth()/4, fr.getHeight()/4, fr.getWidth()/2, fr.getHeight()/2, Color.yellow);
//创建一个窗口,要求中间的Panel正好处于中心,且长宽各为窗口的对应长宽的一半
new MyFram(Color.blue, Color.yellow);
//创建窗口填充整个屏幕,其中有m8行6列的窗口数,启示窗口的颜色为红色
new MultiWnd(8, 6, Color.red);
}
}
class MyPanel extends Panel{
/**
*
*/
private static final long serialVersionUID = -5116728333334131221L;
MyPanel( Frame f, int x, int y, int cx, int cy, Color c){
setBounds(x, y, cx, cy);
setBackground(c);
setVisible(true);
f.add(this);
}
}
class MyFram extends Frame{
/**
*
*/
private static final long serialVersionUID = -5650658819184839541L;
MyFram(Color f, Color p){
setTitle("中心带panel的fram");
setLayout(null);//不加这句,即不设置布局管理器的话就不会显示预期结果
setResizable(false);
setSize(800, 600);
setLocation(300,50);
setBackground(f);
setVisible(true);
Panel pan1 = new Panel();
pan1.setBounds(getWidth()/4,getHeight()/4,getWidth()/2,getHeight()/2);
pan1.setBackground(p);
add(pan1);
pan1.setVisible(true);
}
}
class MultiWnd extends Frame{
/**
*
*/
private static final long serialVersionUID = 1L;
int sumWidth, sumHeight;
MultiWnd(int m, int n, Color c){
setLayout(null);
sumWidth = Toolkit.getDefaultToolkit().getScreenSize().width;
sumHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
int width = sumWidth/m;
int height = sumHeight/n;
Frame fr = null;
ArrayList c1 = new ArrayList();
c1.add(Color.red);
c1.add(Color.black);
c1.add(Color.blue);
c1.add(Color.cyan);
c1.add(Color.yellow);
c1.add(Color.white);
c1.add(Color.gray);
c1.add(Color.green);
c1.add(Color.magenta);
c1.add(Color.orange);
c1.add(Color.pink);
int n1 = c1.indexOf(c);
for(int i=0; i
for(int j=0; j
fr = new Frame( "["+i+","+j+"]");
fr.setSize(width-10, height-10);
fr.setLocation(i*width, j*height);
fr.setBackground(c1.get(n1++%c1.size()));
fr.setResizable(false);
fr.setVisible(true);
}
}
}
}
补充:
布局管理器
FlowLayout布局,这个是从左到右依次布局的,是Panel的默认布局方式。
BorderLayout布局,这个是分东南西北中布局的,是Frame的默认布局方式的。
事件处理的GUI例子:
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Iterator;
public class TestMouseAdapter {
public static void main(String[] args){
new MouseFrame();
}
}
class MouseFrame extends Frame{
ArrayList points = null;
Label lab = null;
public MouseFrame() {
points = new ArrayList();
setLayout(null);
lab = new Label();
add(lab);
setTitle("测试鼠标事件!");
setBounds(300,35,800,600);
lab.setBounds(0, getHeight()-30, getWidth(), 20);
setVisible(true);
addMouseListener(new Monitor());
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent k) {
// TODO Auto-generated method stub
setTitle(String.valueOf(lab.getText().length()+1));
String str = lab.getText();
str += String.valueOf(k.getKeyChar());
if(str.length()>115){
str = str.substring(str.length()-115);
}
lab.setText(str);
}
});
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
//super.windowClosed(e);
setVisible(false);
System.exit(0);
}
});
}
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
Iterator i = points.iterator();
while(i.hasNext()){
Point p = i.next();
g.setColor(Color.red);
g.fillOval(p.x, p.y, 10, 10);
}
super.paint(g);
}
void addPoint(Point p){
points.add(p);
}
}
class Monitor extends MouseAdapter{
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
MouseFrame f = (MouseFrame)e.getSource();
f.addPoint(new Point(e.getX(),e.getY()));
f.repaint();
super.mousePressed(e);
}
}