Java手记---Swing类和awt类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Graphics a;  
a.drawOval(size.width/4,size.height/4,size.width/2,size.height/2);////////此时椭圆
在中心。
a.drawString("Hello world
gj",20,200);/////20是最左的象素坐标,200是基线

Cbox()
{
setLayout(new FlowLayout());
Checkbox cb = new Checkbox("he");//////复选框有2个构造器Checkbox(String
s)&Checkbox(String s,boolean state).
add(cb);///if there isn't this statement, theCheckbox won't appear.
setSize(200,200);
}

CheckboxGroup cbg = new CheckboxGroup();
Checkbox(String s,boolean state,CheckboxGroup cbg)&Checkbox(String
s,CheckboxGroup cbg,boolean state);/////这样可以建单选框。


Checkbox(String s)用来建复选框与单选框。
Choice()用来建下拉式单选。
Frame(String s)用来建窗口。
Button(String s)用来建按钮。
Label(String s)用来建标签。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
setLayout(new FlowLayout());  
Choice c = new Choice();
for(int i = 0;i < fontFamily.length;i++)
c.add(fontFamily[i]);
add(c);
c = new Choice();/////////////////////////这样相当于新建一个下拉单选框。
for(int i = 0;i < size.length;i++)
c.add(size[i]+"");
add(c);
setSize(200,200);

public class TestFrame extends Frame {
public void doDemo(){
Button b = new Button("Press Me!");
b.addActionListener(new ButtonHandler());///在这里添加实现
add(b,BorderLayout.CENTER);
pack();////如果没有这句,最初按钮是看不到的。最大化后才会看到。
setVisible(true);
}
public static void main(String args[]) {
TestFrame   f = new TestFrame();
f.doDemo();
}
////////以下是一个内部类
public class ButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
setTitle("Button's label is :" +
e.getActionCommand());////这里getActionCommand()函数返回的是控件的名称。
}
}
}

如果main中加上这个函数

1
2


f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});//////////就可以实现窗口关闭功能。

public class MouseMoveHandler implements MouseListener {
private Color source = null;

public void mouseEntered(MouseEvent e) {
source = e.getComponent().getBackground();
e.getComponent().setBackground(Color.PINK);
}
public void mouseExited(MouseEvent e) {
e.getComponent().setBackground(source);
}

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

awt提供的控件:

  • Button
  • Label
  • Checkbox
  • CheckboxGroup
  • Choice
  • TextField
  • TextArea
  • List
  • Font
  • Image
  • Canvas
  • Graphics2D
  • Dialog
  • ScrollPanel
  • Menu
  • Toolkit
  • InputMethod
1
2
3
4
5
6
7
8
9
10
11
textTabbedPane = new JTabbedPane(JTabbedPane.BOTTOM);/////将标签放在下部。  
privateScrollPane = new JScrollPane();
privateTextPane = new JTextPane();

privateTextPane.setEditable(true);///////这是把JTextPane设置为可以编辑的。(是否能让用户编辑)
// privateTextPane.setName("");//////这句似乎没什么用。
privateScrollPane.setViewportView(privateTextPane);///JScrollPane可以显示JTextPane
上的内容。
textTabbedPane.addTab("private",privateScrollPane);//这句才是把最重要的。把JScrollPane放在J
TabbedPane上。
add(textTabbedPane)///把JTabbedPane放在JFrame上。

在编写菜单的时候不需写setLayout(new FlowLayout());
如果在编写按钮的时候不写上面的代码,那么按钮就会变的很大。上一行代码是布局管理器。

应该始终有一个File菜单,它应该始终在菜单栏的最左边。菜单项New,Open…和Close(如
果有的话)
应该按上面的次序出现。New应该是第一项,Exit应该是最后一项。
如果有Edit项的话,应该为第二项,它应该有copy,paste,cut等功能。
如果有help项的话,应该是最后一项。

如果不把菜单加到菜单栏上,那么菜单栏就不会出现。

1
2
3
TextArea ta = new
TextArea(10,20);/////////////////////用于创建文本框。第一个参数为高度,第二个为长度。
Scrollbar sb = new Scrollbar(Scrollbar.HORIZONTAL);////////////用于建一个水平方向的控制条。

有两种布局管理器:流程布局管理器和边框布局管理器。
1.流程布局管理器
setLayout(new FlowLayout(FlowLayout.LEFT));
2.边框管理器
边框管理器使用add();使用边框管理器的容器只能有五个构件。

1
2
3
4
add(sb,"North");//////这就是边框管理器。之前不再用setLayout(new FlowLayout());

add(p,"South");//////////////"South"一定要大写。

调用了边框管理器后,构件的大小就不再受传入参数的制约。如果不指明就将占据剩余的整个空间。

1
2
3
4
Panel p = new Panel();//////////创建新面板。  
p.add(new Button("HI"));
p.add(new TextField("ldldl",10));//////////可以将几个构件锁在一起。

流程管理器可以兑现构件的优先大小。而边框管理器不行。此外还有3个管理器:

  • CardLayout(),仅允许在任何时候只有一个构件是可见的。
  • GridLayout()
  • GridBagLayout().

////////////////////////MenuBar mb = new MenuBar();
////////////////////////setMenuBar(mb);///////////此句用于设置菜单栏。

当一个构件和一个paint()方法都负责屏幕的同一部分时,总是构件获胜。

1)创建构件。
2)创建实现Listener接口的收听者。
3)构造该收听者的一个实例。
调用该构件add
Listener()方法,同时传入刚建成的收听者类的实例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

public SelfListener()
{
setLayout(new FlowLayout());
for(int i = 0;i < btn.length;i++)

btn[i] = new Button(s[i]);
btn[i].addActionListener(this);
add(btn[i]);
}
tf = new TextField(25);
add(tf);
setSize(200,300);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == btn[0])
nCon -= 1;
else if(e.getSource() == btn[1])
nCon -= 2;
else
nCon -= 3;
tf.setText(nCon + " Left.");
if(nCon < 3)
btn[2].setEnabled(false);
if(nCon < 2)
btn[1].setEnabled(false);
if(nCon == 0)
{
Label ab = new Label("win!");//////////在这里会出现混乱。//////win!迟迟不出现。只有变化窗口的时候才会
add(ab,"South");///////////////////////出现。
btn[0].setEnabled(false);
}
}

使用repaint()方法可以刷屏并调用paint()。

当画的图形位置不对时,有可能在屏幕上显示不出来。

1
2
3
4
tf.setText("Font Color is "
+ c.getItem(c.getSelectedIndex())
+ cb[i].getLabel() );//////////////////此处用于返回checkbox所选项。

当程序启动时paint()调用。当图文框被完全覆盖时,paint()被调用,当图文框放大时,paint()被调用。被最小化再还原时调用。
其余时间都不会调用paint()。

1
2
3
btn[i].addActionListener(this);  
btn[i].addActionListener(this);//////////此时进行两次调用。点一次鼠标有两次动作。

想让一个任意的类成为一个动作收听者,光实现一个actionperformed()的方法是不够的。因为单凭这一点不能
认为它实现了ActionListener接口。

当类中函数要用到其它函数中的变量时,特别是构件要声明成类的变量而不是函数中的变量。

publicTextPane是放在publicScrollPane上的,而publicScrollPane是放在textTabbedPane上的。
这样使用:

1
2
3
4
5
6
7
8
publicTextPane.setEditable(false);///这个面板是否可以操作。  


////      publicTextPane.setName("");//////////////////?似乎没有什么用。
publicScrollPane.setViewportView(publicTextPane);//让面板显示
textTabbedPane.addTab("public",publicScrollPane);//在textTabbedPane上添加滚动条。

///   frameClient.getContentPane().add(new JButton(), BorderLayout.CENTER);/////////这句话用于JFrame添加控件。