AWT编程练习
2017-07-21 10:52 耳朵嫁给了真正的谎 阅读(260) 评论(0) 收藏 举报前段时间老是直接贴代码,什么都没有,发现这样长期下来不行。虽然以后可能不会看,但是万一需要它就不能很好的起到提示作用。此后尽量把代码详细化,简单化
package chapter11AWT;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextField;
public class FrameTest {
/**
* 一个简单的FRAME窗口
* 标题为:测试窗口
* setBounds:是表示窗口的大小和位置
* setvisible(true)是把图形界面设置为可见,false不可见(默认)
* 此处还未设置关闭窗口活动,所以只能打开任务管理器
*/
public static void main(String[] args) {
Frame f=new Frame("测试窗口");
Frame f1=new Frame("对比");
Panel p=new Panel();//Panel只是一个容器。可以用来再放一些组件什么的,但是不能单独存在,必须放置在其他容器里
p.add(new TextField(20));//文本框
p.add(new Button("单击我"));//一个按钮,未触发任何事件
f.add(p);
// ScrollPane sp=new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
// sp.add(new TextField(20));
// sp.add(new Button("单击我"));这两行代码将会只出现一个按钮
// sp.add()
// f1.add(sp);
// f1.setBounds(30,30,250,120);//不难发现f1的显示只有一个按钮还加上了水平、垂直滚动条,那么文本框呢?
/*
*BorderLayout将容器分为五个部分:east、south、west、north、center。默认为center
*如果像一个区域添加多个组件,后添加的组件会覆盖掉之前的组件
*/
//修改如下
f1.setLayout(new BorderLayout(30,5));//设置Frame容器使用BorderLayout布局管理器
f1.add(new Button("中"));//添加到默认区域
f1.add(new Button("东"), BorderLayout.EAST);
f1.add(new Button("南"), BorderLayout.SOUTH);
f1.add(new Button("西"), BorderLayout.WEST);
f1.add(new Button("北"), BorderLayout.NORTH);
f.setBounds(30,30,250,120);
f1.pack();//设置窗口为最佳大小
f.setVisible(true);
f1.setVisible(true);
}
}
将BorderLatout和GridLayout两个布局管理器结合起来,做一个计算器的界面。毕竟还是要在实践中才能知真理`
package chapter11AWT;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextField;
public class CounterTest {
/**
* 设置一个简单的计算器的界面,暂时还未完善他的功能
* 计算器的话最好是利用BorerLayout+GirdLayout两种相结合。计算器显示部分算北,数字等用GirdLayout的网格显示
* 好吧,丑了点。哦特别丑。
* 还是没设置关闭的功能,不急不急
*/
public static void main(String[] args) {
Frame f=new Frame("计算器可视化窗口");
f.setLayout(new BorderLayout(60,40));//水平间距和垂直间距
f.add(new TextField(20),BorderLayout.NORTH);//这个是他的文本框部分
Panel p=new Panel();//这些用来存放按钮
p.setLayout(new GridLayout(3,5,2,1));//行数,列数。横向间距,纵向间距。
for(int i=0;i<10;i++)
{
p.add(new Button(i+""));//此处需要注意的是必须添加字符型
}
p.add(new Button("/"));
p.add(new Button("*"));
p.add(new Button("-"));
p.add(new Button("+"));
p.add(new Button("."));
f.add(p);
f.pack();
f.setVisible(true);
}
}
package chapter11AWT;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
public class GridBagLayoutTest {
/**
* 这个相较其他布局管理器要强大许多,但是也会复杂一点。
* 在GridBagLayout当中一个组件可以跨越一个或者多个网格,并可以设置各网格的大小互不相同,也添加了其灵活性
* 可以准确的控制窗口各部分的拉伸
* 一旦你决定使用GridBagLayout,
* 接下来一步便是要找一些纸和铅笔,只有你准确知道你的界面看上去需要成什么样子,你就可以敲键盘。
* 这就是说,你应该在编码之前进行妥善规划。
* GirdBagLayout()建立一个新的GridBagLayout管理器。
GridBagConstraints()建立一个新的GridBagConstraints对象。
GridBagConstraints(
int gridx,int gridy,int gridwidth,int gridheight,double weightx,double weighty,
int anchor,int fill, Insets insets,int ipadx,int ipady)
建立一个新的GridBagConstraints对象,并指定其参数的值。这些参数比较多,各个作用此处就不贴出来了,网上有很多了.
*
*/
private Frame f=new Frame("测试窗口");
private GridBagLayout gb=new GridBagLayout();
private GridBagConstraints gbc=new GridBagConstraints();
private Button[] bs=new Button[10];
public void init()
{
f.setLayout(gb);
for(int i=0;i<bs.length;i++)
{
bs[i]=new Button("按钮"+i);
}
gbc.fill=GridBagConstraints.BOTH;
gbc.weightx=1;
addButton(bs[0]);
addButton(bs[1]);
addButton(bs[2]);
gbc.gridwidth=GridBagConstraints.REMAINDER;//该GirdBagConstraints控制的GUI组件将会成为横向最后一个组件
addButton(bs[3]);
gbc.weightx=0;//该GirdBagConstraints控制的GUI组件将会在横向不会扩大
addButton(bs[4]);
gbc.gridwidth=2;//该GirdBagConstraints控制的GUI组件将会在横夸两个网格
addButton(bs[5]);
gbc.gridwidth=1;//该GirdBagConstraints控制的GUI组件将会在横夸一个网格
gbc.gridheight=2;//该GirdBagConstraints控制的GUI组件将会在上夸两个网格。。。这句话好像没起作用
gbc.gridwidth=GridBagConstraints.REMAINDER;//该GirdBagConstraints控制的GUI组件将会在横向最后一个组件
addButton(bs[6]);
gbc.gridwidth=1;//该GirdBagConstraints控制的GUI组件将会在横夸一个网格
gbc.gridheight=2;//该GirdBagConstraints控制的GUI组件将会在上夸两个网格
gbc.weighty=1;//在纵向上扩大
addButton(bs[7]);
gbc.weighty=0;//该GirdBagConstraints控制的GUI组件将会在纵向不会扩大
gbc.gridwidth=GridBagConstraints.REMAINDER;//该GirdBagConstraints控制的GUI组件将会在横向最后一个组件
gbc.gridheight=1;//该GirdBagConstraints控制的GUI组件将会在上夸一个网格
addButton(bs[8]);
addButton(bs[9]);
f.pack();
f.setVisible(true);
}
private void addButton(Button button)
{
gb.setConstraints(button, gbc);
f.add(button);
}
public static void main(String[] args) {
new GridBagLayoutTest().init();
}
}
---恢复内容结束---
前段时间老是直接贴代码,什么都没有,发现这样长期下来不行。虽然以后可能不会看,但是万一需要它就不能很好的起到提示作用。此后尽量把代码详细化,简单化
package chapter11AWT;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextField;
public class FrameTest {
/**
* 一个简单的FRAME窗口
* 标题为:测试窗口
* setBounds:是表示窗口的大小和位置
* setvisible(true)是把图形界面设置为可见,false不可见(默认)
* 此处还未设置关闭窗口活动,所以只能打开任务管理器
*/
public static void main(String[] args) {
Frame f=new Frame("测试窗口");
Frame f1=new Frame("对比");
Panel p=new Panel();//Panel只是一个容器。可以用来再放一些组件什么的,但是不能单独存在,必须放置在其他容器里
p.add(new TextField(20));//文本框
p.add(new Button("单击我"));//一个按钮,未触发任何事件
f.add(p);
// ScrollPane sp=new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
// sp.add(new TextField(20));
// sp.add(new Button("单击我"));这两行代码将会只出现一个按钮
// sp.add()
// f1.add(sp);
// f1.setBounds(30,30,250,120);//不难发现f1的显示只有一个按钮还加上了水平、垂直滚动条,那么文本框呢?
/*
*BorderLayout将容器分为五个部分:east、south、west、north、center。默认为center
*如果像一个区域添加多个组件,后添加的组件会覆盖掉之前的组件
*/
//修改如下
f1.setLayout(new BorderLayout(30,5));//设置Frame容器使用BorderLayout布局管理器
f1.add(new Button("中"));//添加到默认区域
f1.add(new Button("东"), BorderLayout.EAST);
f1.add(new Button("南"), BorderLayout.SOUTH);
f1.add(new Button("西"), BorderLayout.WEST);
f1.add(new Button("北"), BorderLayout.NORTH);
f.setBounds(30,30,250,120);
f1.pack();//设置窗口为最佳大小
f.setVisible(true);
f1.setVisible(true);
}
}
将BorderLatout和GridLayout两个布局管理器结合起来,做一个计算器的界面。毕竟还是要在实践中才能知真理`
package chapter11AWT;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextField;
public class CounterTest {
/**
* 设置一个简单的计算器的界面,暂时还未完善他的功能
* 计算器的话最好是利用BorerLayout+GirdLayout两种相结合。计算器显示部分算北,数字等用GirdLayout的网格显示
* 好吧,丑了点。哦特别丑。
* 还是没设置关闭的功能,不急不急
*/
public static void main(String[] args) {
Frame f=new Frame("计算器可视化窗口");
f.setLayout(new BorderLayout(60,40));//水平间距和垂直间距
f.add(new TextField(20),BorderLayout.NORTH);//这个是他的文本框部分
Panel p=new Panel();//这些用来存放按钮
p.setLayout(new GridLayout(3,5,2,1));//行数,列数。横向间距,纵向间距。
for(int i=0;i<10;i++)
{
p.add(new Button(i+""));//此处需要注意的是必须添加字符型
}
p.add(new Button("/"));
p.add(new Button("*"));
p.add(new Button("-"));
p.add(new Button("+"));
p.add(new Button("."));
f.add(p);
f.pack();
f.setVisible(true);
}
}
package chapter11AWT;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
public class GridBagLayoutTest {
/**
* 这个相较其他布局管理器要强大许多,但是也会复杂一点。
* 在GridBagLayout当中一个组件可以跨越一个或者多个网格,并可以设置各网格的大小互不相同,也添加了其灵活性
* 可以准确的控制窗口各部分的拉伸
* 一旦你决定使用GridBagLayout,
* 接下来一步便是要找一些纸和铅笔,只有你准确知道你的界面看上去需要成什么样子,你就可以敲键盘。
* 这就是说,你应该在编码之前进行妥善规划。
* GirdBagLayout()建立一个新的GridBagLayout管理器。
GridBagConstraints()建立一个新的GridBagConstraints对象。
GridBagConstraints(
int gridx,int gridy,int gridwidth,int gridheight,double weightx,double weighty,
int anchor,int fill, Insets insets,int ipadx,int ipady)
建立一个新的GridBagConstraints对象,并指定其参数的值。这些参数比较多,各个作用此处就不贴出来了,网上有很多了.
*
*/
private Frame f=new Frame("测试窗口");
private GridBagLayout gb=new GridBagLayout();
private GridBagConstraints gbc=new GridBagConstraints();
private Button[] bs=new Button[10];
/*
* 把需要重复访问的AWT组件设置成成员变量,然后使用init()方法来完成界面的初始化工作。
* 这种做法比前面那种在MAIN里好
*/
public void init()
{
f.setLayout(gb);
for(int i=0;i<bs.length;i++)
{
bs[i]=new Button("按钮"+i);
}
gbc.fill=GridBagConstraints.BOTH;
gbc.weightx=1;
addButton(bs[0]);
addButton(bs[1]);
addButton(bs[2]);
gbc.gridwidth=GridBagConstraints.REMAINDER;//该GirdBagConstraints控制的GUI组件将会成为横向最后一个组件
addButton(bs[3]);
gbc.weightx=0;//该GirdBagConstraints控制的GUI组件将会在横向不会扩大
addButton(bs[4]);
gbc.gridwidth=2;//该GirdBagConstraints控制的GUI组件将会在横夸两个网格
addButton(bs[5]);
gbc.gridwidth=1;//该GirdBagConstraints控制的GUI组件将会在横夸一个网格
gbc.gridheight=2;//该GirdBagConstraints控制的GUI组件将会在上夸两个网格。。。这句话好像没起作用
gbc.gridwidth=GridBagConstraints.REMAINDER;//该GirdBagConstraints控制的GUI组件将会在横向最后一个组件
addButton(bs[6]);
gbc.gridwidth=1;//该GirdBagConstraints控制的GUI组件将会在横夸一个网格
gbc.gridheight=2;//该GirdBagConstraints控制的GUI组件将会在上夸两个网格
gbc.weighty=1;//在纵向上扩大
addButton(bs[7]);
gbc.weighty=0;//该GirdBagConstraints控制的GUI组件将会在纵向不会扩大
gbc.gridwidth=GridBagConstraints.REMAINDER;//该GirdBagConstraints控制的GUI组件将会在横向最后一个组件
gbc.gridheight=1;//该GirdBagConstraints控制的GUI组件将会在上夸一个网格
addButton(bs[8]);
addButton(bs[9]);
f.pack();
f.setVisible(true);
}
private void addButton(Button button)
{
gb.setConstraints(button, gbc);
f.add(button);
}
public static void main(String[] args) {
new GridBagLayoutTest().init();
}
}
Java 的布局管理器GridBagLayout的使用方法【图文说明】 - 陶伟基Wiki - 博客园 http://www.cnblogs.com/taoweiji/archive/2012/12/14/2818787.html
这个好,这样就好看多了嘛。
package chapter11AWT;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.CardLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionListener;
public class CardLayoutTest {
/*
* CardLayout以时间管理里面的组件,只有最上面那个组件可见。打牌最好了~
* CardLayout控制组件的方法有:first、last、previous、next、show(显示target容器中指定名字的卡片)。其他的就从意思里理解就行
*/
private Frame f=new Frame("测试窗口");
String[] names={"第一张","第二张","第三张","第四张"};
Panel p1=new Panel();
public void init()
{
final CardLayout c=new CardLayout();
p1.setLayout(c);
for(int i=0;i<names.length;i++)
{
p1.add(names[i],new Button(names[i]));
}
Panel p=new Panel();
ActionListener listener = e->
{
switch(e.getActionCommand())
{
case "上一张":c.previous(p1);break;
case "下一张":c.next(p1);break;
case "第一张":c.first(p1);break;
case "最后一张":c.last(p1);break;
case "第三张":c.show(p1,"第三张");break;
}
};
Button previous=new Button("上一张");
previous.addActionListener(listener);
Button next=new Button("下一张");
next.addActionListener(listener);
Button first=new Button("第一张");
first.addActionListener(listener);
Button last=new Button("最后一张");
last.addActionListener(listener);
Button third=new Button("第三张");
third.addActionListener(listener);
p.add(previous);
p.add(next);
p.add(first);
p.add(last);
p.add(third);
f.add(p1);
f.add(p,BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
}
public static void main(String[] args)
{
new CardLayoutTest().init();
}
}
难过,明明jdk配置都正确的情况,lambda表达式还是出现异常lambda expressions are not supported at this language level。改咯~
看了一圈,我当初就应该去官网下,当初怕麻烦才惹麻烦。事实证明,出现bug时一群良师益友的重要性还有保持清醒的头脑,慢慢抽丝剥茧总能弄好哒。
布局管理器就练习完毕啦,还有一个BoxLayout的,但是那个比较简单自己看看书看看资料就好了。这种页面类的东西设置主要是要在心里有数,先打稿草稿,之后的事就如鱼得水啦~
哦~还有一点就是一定要改掉什么名字都随便敲。按照习惯来单词组成,首字母大写。以后出去工作了可不是你一个人就能完成的,你要互相配合
浙公网安备 33010602011771号