java setlocation_Java布局管理器初探

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);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值