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<Color> c1 = new ArrayList<Color>(); 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<m; i++){ for(int j=0; j<n; 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<Point> points = null; Label lab = null; public MouseFrame() { points = new ArrayList<Point>(); 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<Point> 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); } }