《Java编程思想》读书笔记(6)

简介:
JButton这一章,Brucke只给出了一个简单的例子,代码如下:

import java.applet.Applet;
import java.awt.*;

import javax.swing.*;

public class Test extends JApplet
{
    private JButton btn1;
    private JButton btn2;
    /**
     * @param args
     */
    public void init()
    {
        this.btn1 = new JButton("确定");
        this.btn2 = new JButton("重置");
        Container con = this.getContentPane();
        con.setLayout(new FlowLayout());

        con.add(btn1);
        con.add(btn2);
    
        
        
    }
    public static void main(String[] args)
    {
        Test t1 = new Test();
        Console.run(t1,300,300);

    }

}

这一节没有过多的东西可以思考,但布局管理器的知识值得去深究。

Java语言中提供的布局管理器种类有:边界式布局、卡片式布局、流式布局和网格式布局等,各有不同的特点,可根据实际 需要选用;但有最大自由设计空间的是“无布局管理器”——即不使用任何布局格式,而通过手工方式添加组件到页面布局的绝对位置上。因此我采用“无布局管理器”将他的代码改写如下:

import java.applet.Applet;
import java.awt.*;

import javax.swing.*;

public class Test extends JApplet
{
    private JButton btn1;
    private JButton btn2;
    /**
     * @param args
     */
    public void init()
    {
        this.btn1 = new JButton("确定");
        this.btn2 = new JButton("重置");
        Container con = this.getContentPane();
        //con.setLayout(new FlowLayout());
        con.setLayout(null);
        btn1.reshape(30,30,100,100);
        btn2.reshape(150,150,100,100);

        con.add(btn1);
        con.add(btn2);
    
        
        
    }
    public static void main(String[] args)
    {
        Test t1 = new Test();
        Console.run(t1,600,600);

    }

}


1.  GridLayout

GridLayout类是布局管理器之一,它将容器中的组件在放置在一个矩形网格中。容器被划分为相同大小的矩形,而每个组件就放置在一个单独的矩形中。

import java.awt.*;
import javax.swing.*;

public class GridForm extends JFrame
{

    /**
     * @param args
     */
    public static void main(String[] args) 
    {
        // TODO Auto-generated method stub
        GridForm gf = new GridForm();
        gf.setLayout(new GridLayout(3,2));
        Container con = gf.getContentPane();
        con.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
        
        con.add(new JButton("1"));
        con.add(new JButton("2"));
        con.add(new JButton("3"));
        con.add(new JButton("4"));
        con.add(new JButton("5"));
        con.add(new JButton("6"));
        
        gf.setTitle("GridLayout例子");
        gf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gf.setSize(200,200);
        gf.setVisible(true);


    }

}

如果容器的ComponentOrientation属性是水平的并且从左到右,上面例子产生如下图1:

如果容器的ComponentOrientation属性是horizontal 和 right-to-left,结果就如下图2:

当行数和列数都被设置为非零值(不管是通过构造函数或者通过setRows和setColumns方法来设置),指定的列数就会被忽略掉。例如说,如果指定是3行3列,而将布局中放置9个组件,它们就会显示为3行3列。

2.BorderLayout

边界布局会把容器看成五个:部分:north, south, east, west,和 center。每个区域最多包含一个组件,重要的五个常量:NORTH, SOUTH, EAST, WEST和 CENTER;



    Panel p = new Panel();
    p.setLayout(new BorderLayout());
    p.add(new Button("Okay"), BorderLayout.SOUTH);
==================================================
==================================================

    Panel p2 = new Panel();
    p2.setLayout(new BorderLayout());
    p2.add(new TextArea());  // Same as p.add(new TextArea(), BorderLayout.CENTER);
<!--[endif]-->
BorderLayout 支持相对定位常量, PAGE_START, PAGE_END, LINE_START, and LINE_END. 在一个容器中,如果它的 ComponentOrientation 被设置为ComponentOrientation.LEFT_TO_RIGHT,这些常量就分别映射为 NORTH, SOUTH, WEST, and EAST

为了与以前兼容,BorderLayout也好汉相对定位常量 BEFORE_FIRST_LINE, AFTER_LAST_LINE, BEFORE_LINE_BEGINS and AFTER_LINE_ENDS. 他们分别和PAGE_START, PAGE_END, LINE_START and LINE_END等价.

如果同时使用绝对定位和相对定位,就会产生不可预测的结果。例如,如果你在容器中同时使 NORTH 和 PAGE_START 常量 来添加组件,而容器的 方向是 LEFT_TO_RIGHT, 那么就只有PAGE_START被会布局。


import java.awt.*;
import javax.swing.*;

public class GridForm extends JFrame
{

    /**
     * @param args
     */
    public static void main(String[] args) 
    {
        // TODO Auto-generated method stub
        GridForm gf = new GridForm();
        gf.setLayout(new BorderLayout());
        Container con = gf.getContentPane();
        con.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
        
        con.add(new JButton("North"),BorderLayout.NORTH);
        con.add(new JButton("SOUTH"),BorderLayout.SOUTH);
        con.add(new JButton("EAST"),BorderLayout.EAST);
        con.add(new JButton("WEST"),BorderLayout.WEST);
        con.add(new JButton("CENTER"),BorderLayout.CENTER);
    
        gf.setTitle("BorderLayout例子");
        gf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gf.setSize(200,200);
        gf.setVisible(true);
    }

}



3.  FlowLayout

       FlowLayout会将组件从左到右进排列,就象文章中的文本行一样。流布局一般用在面板中的按纽的放置。它将会将按纽以从左至右的方式排放,直到在同一行中再也放不下更多的按纽了。


import java.awt.*;
import javax.swing.*;

public class GridForm extends JFrame
{

    /**
     * @param args
     */
    public static void main(String[] args) 
    {
        // TODO Auto-generated method stub
        GridForm gf = new GridForm();
        //gf.setLayout(new BorderLayout());
        gf.setLayout(new FlowLayout());
        Container con = gf.getContentPane();
        con.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
        
        con.add(new JButton("North"));
        con.add(new JButton("SOUTH"));
        con.add(new JButton("EAST"));
        con.add(new JButton("WEST"));
        con.add(new JButton("CENTER"));
        
        gf.setTitle("FlowLayout例子");
        gf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gf.setSize(200,200);
        gf.setVisible(true);


    }

}

4.BoxLayout
   BoxLayout能让你在垂直和水平两个方向上控制组件的摆放,它用一些被称为支柱(struts)和胶水(glue)的东西来控制组件间的距离。

 package com.vitamin.UI;

import javax.swing.*;
import java.awt.*;
import com.vitamin.*;
import com.vitamin.Console.console;

public class BoxLayout1 extends JApplet {
  public void init() {
    JPanel jpv = new JPanel();
    jpv.setLayout(new BoxLayout(jpv, BoxLayout.Y_AXIS));
    for(int i = 0; i < 5; i++)
      jpv.add(new JButton("jpv " + i));
    JPanel jph = new JPanel();
    jph.setLayout(new BoxLayout(jph, BoxLayout.X_AXIS));
    for(int i = 0; i < 5; i++)
      jph.add(new JButton("jph " + i));
    Container cp = getContentPane();
    cp.add(BorderLayout.EAST, jpv);
    cp.add(BorderLayout.SOUTH, jph);
  }
  public static void main(String[] args) {
    console.run(new BoxLayout1(), 450, 200);
  }
}
6-4-1.GIF




本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2006/06/01/415342.html,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
设计模式 敏捷开发 Java
全网首发!Java界的四大名著之一:Java编程思想最新中文版已开源
老版《Java编程思想》(原书名《Thinking in Java》)得益作者开放深度研讨的创作方式,受到了全世界读者的追捧,被译为了十几种语言。但遗憾的是,在经历了 4 个版本的更新后,其最后一版发布于 2007 年,之后再无更新。
|
3月前
|
设计模式 Java 程序员
感动哭了!Java界的四大名著之一:Java编程思想最新中文版已开源
还记得这本书吗?是不是已经在你的桌上铺满厚厚的一层灰了?随着 Java 8 的出现,这门语言在许多地方发生了翻天覆地的变化。最新版已经出来了,在新的版本中,代码的运用和实现上与以往不尽相同。
|
9月前
|
Java C++
java 编程思想 多线程学习笔记
java 编程思想 多线程学习笔记
79 0
|
4月前
|
Java 测试技术 API
读书笔记-Spring中更好的Java泛型操作API-ResolvableType
读书笔记-Spring中更好的Java泛型操作API-ResolvableType
31 0
|
6月前
|
存储 Java 程序员
Java的第五篇文章——面向对象的编程思想(类和对象)
Java的第五篇文章——面向对象的编程思想(类和对象)
|
6月前
|
Java
【Java用法】图解《Java编程思想》
【Java用法】图解《Java编程思想》
23 0
|
9月前
|
Java
java 编程思想 多线程学习笔记
java 编程思想 多线程学习笔记
38 0
|
10月前
|
缓存 算法 Java
《深入理解Java虚拟机》读书笔记(四)--GC的回收条件及Java对象的引用
《深入理解Java虚拟机》读书笔记(四)--GC的回收条件及Java对象的引用
204 0
|
10月前
|
存储 缓存 Java
《深入理解Java虚拟机》读书笔记(一)--java内存区域划分
《深入理解Java虚拟机》读书笔记(一)--java内存区域划分
50 0
|
Java 编译器 调度
基本的线程机制—Java编程思想
并发编程使我们可以将程序分为多个分离的、独立运行的任务。通过使用多线程机制,这些独立人物(也被称为子任务)中的每一个都将由执行线程来驱动。 一个线程就是在进程中的一个单一的顺序控制流,因此,单个进程可以拥有多个并发执行的任务。 在使用线程时,CPU将轮流给每个任务分配其占用时间。 线程的一大好处是可以使你从这个层次抽身出来,即diamante不必知道它是运行在具有一个还是多个CPU的机器上。