java 卡片布局管理器的一点小问题

albertwmm 2012-09-08 10:45:36


import java.awt.*;
import java.awt.event.*;
public class CardLayoutDemo extends Frame implements MouseListener{

private Button first=new Button("A");
private Button second=new Button("B");
private Button third=new Button("C");
private CardLayout cl=new CardLayout();
private Panel cards=new Panel();

public CardLayoutDemo(String string){
super(string);
init(); //调用init方法
}

public void init(){
setLayout(new BorderLayout());
setSize(500, 500);

Panel p=new Panel();
p.setLayout(new FlowLayout());

first.addMouseListener(this);
second.addMouseListener(this);
third.addMouseListener(this);

p.add(first);
p.add(second);
p.add(third);

add("North",p);
cards.setLayout(cl);
cards.add("First cards",new Button("AA"));
cards.add("second Button",new Button("BB"));
cards.add("third cards",new Button("CC"));
add("Center",cards);

addWindowListener(new WindowAdapter(){
public void WindowClosing(WindowEvent evt){
setVisible(false);
dispose();
System.exit(0);
}
});

setVisible(true);
}

public static void main(String[] args) {
new CardLayoutDemo("ABCD"); //创建CardLayoutDemo类型变量

}

public void mouseClicked(MouseEvent evt){
if(evt.getSource()==first){
cl.first(cards);
}
else if(evt.getSource()==second){
cl.first(cards);
cl.next(cards);
}
else if(evt.getSource()==third){
cl.last(cards);
}
}
public void mouseEntered(MouseEvent arg0){
}
public void mouseExited(MouseEvent arg0){
}
public void mousePressed(MouseEvent arg0){
}
public void mouseReleased(MouseEvent arg0){
}

}





有些地方一直搞不懂,请老手教下新手

1.前面学了其他的布局管理器。 都没看到 实例化布局管理器。这里有private CardLayout cl=new CardLayout(); 为什么要对布局器实例化对象呢?有什么用意吗?

2.init方法中 设置窗口布局和大小的时候 不需要先对Frame窗口实例化再调用吗? 为什么可以直接这样写?

3.在main中 为什么不需要设置对象啊?

4.为什么要在构造方法中调用init方法啊?

5.在cards中添加按钮 为什么需要些"first Button" 。为什么要写这个?能不写或随便写吗?
...全文
304 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wen_ee 2012-09-11
  • 打赏
  • 举报
回复
实例化出来的是对象,跑起来的界面就是实例化的对象。没实例化的叫类,类是不会跑起来的。
hairui1985 2012-09-10
  • 打赏
  • 举报
回复
在cards中添加按钮 为什么需要些"first Button" 。为什么要写这个?能不写或随便写吗?
这是为方便操作来定义的,只要可以明确区分就可以按自己要求定义
albertwmm 2012-09-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

1)new 个对象而已,用意就是创建个布局管理器罢了
2)init方法里是一些初始化代码,你不觉得把初始化代码放在一个名为“初始化”的函数里很专业么?特别是在初始化代码较多的时候。
3)同上
4)这个布局管理器有点特别,他被设计成给每个容器加个标识,你切换视图的时候就用这个标识。 那个“firest Button”就是个标识而已~ 你愿意的话可以叫它“阿猫阿狗”,注意不要有重复的标识~
[/Quote]


我一直想不明白的是 为什么在main方法中 需要创建实例,而且只是创建实例? 创建了又什么都不干?
胡小来 2012-09-09
  • 打赏
  • 举报
回复
1)new 个对象而已,用意就是创建个布局管理器罢了
2)init方法里是一些初始化代码,你不觉得把初始化代码放在一个名为“初始化”的函数里很专业么?特别是在初始化代码较多的时候。
3)同上
4)这个布局管理器有点特别,他被设计成给每个容器加个标识,你切换视图的时候就用这个标识。 那个“firest Button”就是个标识而已~ 你愿意的话可以叫它“阿猫阿狗”,注意不要有重复的标识~
albertwmm 2012-09-08
  • 打赏
  • 举报
回复

import java.awt.*;
import java.awt.event.*;
public class CardLayoutDemo implements MouseListener{

private Button b1=new Button("AA");
private Button b2=new Button("BB");
private Button b3=new Button("CC");
private Frame f;
private CardLayout cl=new CardLayout(); //卡片管理器cl
private Panel cards=new Panel(); //容器cards

public CardLayoutDemo(String s){

}

public static void main(String[] args) {
CardLayoutDemo cld=new CardLayoutDemo("ABC");
cld.init();
}

public void init(){
f.setLayout(new BorderLayout());
f.setSize(500,500);

Panel p=new Panel();
p.setLayout(new FlowLayout());

b1.addMouseListener(this);
b2.addMouseListener(this);
b3.addMouseListener(this);

p.add(b1);
p.add(b2);
p.add(b3);

f.add(BorderLayout.NORTH,p);
cards.setLayout(new CardLayout()); //设置容器为卡片管理器
cards.add(new Button("AAA"));
cards.add(new Button("BBB"));
cards.add(new Button("CCC"));
f.add(BorderLayout.CENTER,cards);
f.setVisible(true);

f.addWindowListener(new WindowAdapter(){
public void WindowClosing(WindowEvent evt){
f.setVisible(false);
f.dispose();
System.exit(0);
}
});
}

public void mouseClicked(MouseEvent e) {
if(e.getSource()==b1){
cl.first(cards);
}
else if(e.getSource()==b2){
cl.first(cards);
cl.next(cards);
}
else if(e.getSource()==b3){
cl.last(cards);
}

}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}

public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}



这是我自己写的 Eclipse 没报错, 却运行不起来。怎么改改啊
albertwmm 2012-09-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

3、 new CardLayoutDemo("ABCD"); 这句就已经new 了一个CardLayoutDemo对象。然后调用构造方法
[/Quote]


main里的这句 除了给窗口一个名字 还有其他用吗?有什么需要调用什么的吗?
wuezs 2012-09-08
  • 打赏
  • 举报
回复
1、Frame默认的布局管理器是BorderLayout,容器都有默认布局管理器,所以不用设置,这个例子是卡片布局,所以要new 出来
2、CardLayoutDemo 继承 Frame
3、 new CardLayoutDemo("ABCD"); 这句就已经new 了一个CardLayoutDemo对象。然后调用构造方法
兆帅 2012-09-08
  • 打赏
  • 举报
回复
第一个代码通过调用父类的构造函数 将 实例化时传入的参数 作为了Frame的标题
你这个代码可以把参数 再传给init,然后在init中作为Frame创建时的参数,不过整个代码就没有原来的好,有点乱
albertwmm 2012-09-08
  • 打赏
  • 举报
回复

import java.awt.*;
import java.awt.event.*;
public class CardLayoutDemo implements MouseListener{

private Button b1=new Button("AA");
private Button b2=new Button("BB");
private Button b3=new Button("CC");
private Frame f=new Frame("sssssss");
private CardLayout cl=new CardLayout(); //实例化一个卡片管理器cl
private Panel cards=new Panel(); //容器cards

public CardLayoutDemo(String s){
init();
}

public static void main(String[] args) {
new CardLayoutDemo("xxxx");

}

public void init(){
f.setLayout(new BorderLayout());
f.setSize(500,500);

Panel p=new Panel();
p.setLayout(new FlowLayout());

b1.addMouseListener(this);
b2.addMouseListener(this);
b3.addMouseListener(this);

p.add(b1);
p.add(b2);
p.add(b3);

f.add(BorderLayout.NORTH,p);
cards.setLayout(cl); //设置容器cards为卡片管理器
cards.add("AAaA",new Button("AAA"));
cards.add("BBBb",new Button("BBB"));
cards.add("CCCC",new Button("CCC"));
f.add(BorderLayout.CENTER,cards);
f.setVisible(true);

f.addWindowListener(new WindowAdapter(){
public void WindowClosing(WindowEvent evt){
f.setVisible(false);
f.dispose();
System.exit(0);
}
});
}

public void mouseClicked(MouseEvent e) {
if(e.getSource()==b1){
cl.first(cards);
}
else if(e.getSource()==b2){
cl.first(cards);
cl.next(cards);
}
else if(e.getSource()==b3){
cl.last(cards);
}

}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}

public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}





代码我已经改好了 可以运行了。 但是我实在不知道 main方法中 句子有什么用。。标题也是Frame里的sssss 不是这句里的xxxx
兆帅 2012-09-08
  • 打赏
  • 举报
回复
你这个CardLayoutDemo的实例,没有继承Frame,也没有Frame的成员不会'有反应'
albertwmm 2012-09-08
  • 打赏
  • 举报
回复
我改了下 可以运行了。。 但是我实在不清楚 main方法中的句子到底有什么用。。

import java.awt.*;
import java.awt.event.*;
public class CardLayoutDemo implements MouseListener{

private Button b1=new Button("AA");
private Button b2=new Button("BB");
private Button b3=new Button("CC");
private Frame f=new Frame("ssssss");
private CardLayout cl=new CardLayout(); //实例化一个卡片管理器cl
private Panel cards=new Panel(); //容器cards

public CardLayoutDemo(String s){
init();
}

public static void main(String[] args) {
new CardLayoutDemo("xxxxx");

}

public void init(){
f.setLayout(new BorderLayout());
f.setSize(500,500);

Panel p=new Panel();
p.setLayout(new FlowLayout());

b1.addMouseListener(this);
b2.addMouseListener(this);
b3.addMouseListener(this);

p.add(b1);
p.add(b2);
p.add(b3);

f.add(BorderLayout.NORTH,p);
cards.setLayout(cl); //设置容器cards为卡片管理器
cards.add("AAaA",new Button("AAA"));
cards.add("BBBb",new Button("BBB"));
cards.add("CCCC",new Button("CCC"));
f.add(BorderLayout.CENTER,cards);
f.setVisible(true);

f.addWindowListener(new WindowAdapter(){
public void WindowClosing(WindowEvent evt){
f.setVisible(false);
f.dispose();
System.exit(0);
}
});
}

public void mouseClicked(MouseEvent e) {
if(e.getSource()==b1){
cl.first(cards);
}
else if(e.getSource()==b2){
cl.first(cards);
cl.next(cards);
}
else if(e.getSource()==b3){
cl.last(cards);
}

}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}

public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}




运行出来 标题也是sssss 不是main方法中的xxxx
这个句子到底有什么用啊?用在哪了啊?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧