第13章-Swing(1)

2015/6/19

1、在Swing中的所有组件均继承自javax.swing.JComponent

2、在Swing中,几乎所有的组件上都能够安置其他的组件,同时也可以注册各种监控事件。

3、布局管理器是个特定组件相关联的java对象,它大多数是背景组件。布局管理器用来控制所关联组件上携带的其他组件。

布局管理器有几种不同的类型,每个背景组件都可以有自定义规则的布局管理器。

布局管理器对组件大小的设定,按照实际情况来定。

(1)BorderLayout

这个管理器把背景组件分割成5个区域,每个区域只能放上一个组件。由此管理员安置的组件通常不会取得默认的大小。

*这是框架默认的布局管理器。

frame.getContentPane().add(BorderLayout.EAST,button);

如果组件添加到东西两侧,那么布局管理器只会考虑他们的宽度,如果是添加到南北两侧,则之后考虑他们的高度。

而中间的区域要看周围的限制还剩下什么。

(2)FlowLayout

这个管理器将组件依照理想的大小呈现,并且从左到右依次加入,以可能会换行的方式排列。

*这是面板默认的布局管理器。

panel.add();

面板本身是没有高度和宽度的,她的高度和宽度要由它内部的组件决定。

如果添加两个组件的话,两个组件会并列排为一排,面板的宽度也会增加,直到达到背景frame的宽度

(3)BoxLayout

按照理想大小已加入的顺序排列,但是是以垂直的方向来排列的。不会自动换行,需要插入某种类似换行的机制来强制组件换行。

与FlowLayout布局不同,及时水平宽度足以容纳组件,他还是会用新的行来排列组件。组件会自动的排成一列。面板的宽与最宽的组件相当。

panel.setLayout(new BoxLayout(panel,BoxLayout.Y-AXIS));

//换掉布局管理器,构造函数为:管理的组件、使用的坐标轴

//setLayout()方法用来替换布局管理器。

4、一般情况下,我们不在JFrame上直接添加组件,而是通过JPanel。


Swing组件

1、JTextField(单行文本框)

(1)构造函数:

JTextField field=new JTextField(20);//20代表字符
JTextField field=new JTextField("Your Name");
(2)取得文本

field.getText();
(3)取得用户输入完毕按下“回车”的事件

field.addActionListener(this);
(4)设定内容

field.setText("whatever");
field.setText("");

(5)选取文本段的内容(即全选功能)

field.selectAll();

(6)将GUI的焦点设置为文本框,以方便用户输入
field.requestFocus();

2、JTextArea(多行文本框)

多行文本框需要添加到ScrollPanel上才能实现滚动条的功能。

(1)构造函数

JTextArea text=new JTextArea(10,20);
10行20个字符宽度

(2)滚动条的设置

滚动条构造函数:(将多行文本框添加到滚动条对象上)

JScrollPanel scroller=new JScrollPanel(text);
启动文本框的自动换行

text.setLineWrap(true);
设置垂直方向在任何情况下都显示滚动条:

scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AWAYS);
设置在水平方向上不显示滚动条:

scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
将多行文本框添加到面板上(要添加滚动条对象到面板上)
panel.add(scroller);
(3)

替换文字内容:

text.setText("...");
加入文字
text.append("...");
(4)全选

text.selectAll();
(5)将GUI的焦点设置为文本框,以方便用户输入
text.requestFocus();



范例:

package learn_swing;
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
public class TextArea1 implements ActionListener{
	
	JTextArea text;
	
	public static void main(String[] args){
		TextArea1 gui=new TextArea1();
		gui.go();
	}
	void go(){
		JFrame frame=new JFrame();
		JPanel panel=new JPanel();
		JButton button=new JButton("Just click it");
		button.addActionListener(this);
		text=new JTextArea(10,20);
		text.setLineWrap(true);
		
		JScrollPane scroller=new JScrollPane(text);
		scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		
		panel.add(scroller);
		
		frame.getContentPane().add(BorderLayout.CENTER,panel);
		frame.getContentPane().add(BorderLayout.SOUTH,button);
		
		frame.setSize(350,300);
		frame.setVisible(true);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO 自动生成的方法存根
		text.append("button clicked \n");
	}

}


3、JCheckBox(单选框)

(1)构造函数

JCheckBox check=new JCheckBox("goes to 11");
(2)监听item事件

check.addItemListener(this);
(3)处理事件

public void itemStateChanged(ItemEvent ev){
			
}
(4)返回check是否被选中,选中为true,否则为false

check.isSelected()
(5)用程序来选择

check.setSelected(true);


4、JList(下拉列表)

(1)构造函数

JList的构造函数需要一个任意类型的数组,不一定是String,但会用String来显示项目

String[] listString={"1","2","3","4"};
JList list=new JList(listString);
(2)显示垂直的滚动条
JScrollPane scroller=new JScrollPane(list);
scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
(3)设置显示的行数:

list.setVisibleRowCount(4);
(4)限制用户只能选择一个项目

list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
(5)对事件注册

list.addListSelectionListener(this);
(6)处理事件:

public void valueChanged(ListSelectionEvent lse){
	if(!lse.getValueIsAdjusting()){
		String selection=(String)list.getSelectedValue();
	}
}

getValueIsAdjusting()  如果该值在进行一系列更改,则返回 true。
setValueIsAdjusting(boolean valueIsAdjusting)  如果将来对该模型的值的更改被视为单个事件,则此属性为 true。
 此处的例子中必须要有 if(!lse.getValueIsAdjusting()) ,否则会得到两次事件的相应 

list.getSelectedValue()用于取到用户选中的值,这个值不一定是String类型的,所以需要转换









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值