11.4选择组件

11.4选择组件

复选框,单选按钮,选项列表,以及滑块。

11.4.1 复选框

如果想要接收的输入只是是或否,就可以使用复选框组件。复选框自动带有标识标签。用户点击就一个复选框将它选中,再点击则取消选中,当复选框获得焦点时,用户也可以通过按空格键来切换选择。

在构造器中指定标签文本。

var bold=new JCheckBox("Boid");

可以使用setSelected方法来选中或取消选中复选框。

//初始化时复选框就被选中
boid.setSelected(true);
isSelected方法将获取每个复选框的当前状态。如果没有选中则为false,选中复选框为true。

当用户点击复选框时将触发一个动作事件。与以往一样,可以为复选框关联一个动作监听器。

ActionListener listener=......;
bold.addActionListener(listener);
italic.addActionListener(listener);

监听器代码示例:

AbstractAction action=new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
	            int mode=0;
                if(bold.isSelected())mode+=Font.BOLD;
                if(italic.isSelected())mode+=Font.ITALIC;
                label.setFont(new Font(Font.SERIF,mode,32));
            }
        }
//        或用lamba表达式
        AbstractAction action=event->
        {
		        int mode=0;
                if(bold.isSelected())mode+=Font.BOLD;
                if(italic.isSelected())mode+=Font.ITALIC;
                label.setFont(new Font(Font.SERIF,mode,32));
        
        };
        

常用方法:

方法名方法作用
JCheckBox(String label)构造一个复选框
JCheckBox(String label,Icon icon)构造一个复选框,用给定的标签和图片
JCheckBox(String label,boolean state)构造一个复选框,初始化时候可以选择被选中
boolean isSelected()获取复选框的选择状态
void setSelected(boolean state)设置复选框的状态

11.4.2 单选按钮

当用户选择另一项的时候,前一项就自动地取消,这样一组选项通常称为单选按钮

这是因为这些按钮的工作很像收音机上的电台按钮。当按下一个按钮时候,前一个按下的按钮就会自动弹起。

var group=new ButtonGroup();
var smallButton=new JRadioButton("Small",false);
group.add(samllButton);
var mediumButton=new JRadioButton("Medium",true);
group.add(mediumButton);
对于初始被选中的按钮,构造器的第二个参数为true,对于其他按钮,这个
参数为false,按钮组仅仅控制按钮的行为,如果想把按钮放在一起,需要
把他们添加到容器中和JPanel一样。

单选按钮的事件通知机制与其他按钮一样,当用户点击一个单选按钮的时候,这个按钮将产生一个动作事件。

var listener=event->lable.setFont(Font.SERIF,Font.PLAIN.size);

更因该使用单独的动作监听器,因为这样可以将大小值与按钮更紧密的绑定在一起。

buttonGroup.getSelection().getActopmCommand();获得当前选中的按钮的动作命令。

常用方法方法作用
JRadioButton(String label,Icon icon)构造一个初始没有选中的单选按钮
JRadioButton(String label,boolean state)用给定的标签和初始化状态构造一个单选按钮
void add(AbstractButton b)将按钮添加到组中
ButtonModel getSelection()返回被选中的按钮的模型
String getActionCommand()返回按钮模型的动作命令
void setActionCommand设置按钮及其模型的动作命令

11.4.3边框

如果在一个窗口有很多组单选按钮,就需要用可见的方式来指名哪些按钮属于同一组。
Swing提供了一组很有用的边框来解决这个问题,可以任何继承了JComponent类的组件上应用边框。
最常见的用法是在面板周围放置一个边框,然后用其他用户界面元素填充面板。
有几种不同的边框可供选择,但是使用他们的步骤完全一样

1 . 调用BorderFactory的静态方法创建边框

  • 凹斜面
  • 蚀刻
  • 直线
  • 蒙版
  • 空(只是在组件外围创建一些空白空间)

2.如果愿意的话,可以给边框添加标题,具体的实现方法是将边框传递给

BorderFactory.createTitleBorder。

3.如果确实想全力地使用边框,可以调用以下的方法将几种边框组合起来:

BordeFactory.createCompoundBorder.

4.**调用JComponent类的setBorder方法将得到的边框添加到组件**

代码示例:带有标题的蚀刻边框添加到一个面板

Border etched=BorderFactory.createEtchedBorder();
Border etched=BorderFactory.createTitledBorder(etched,"A Title");
panel.setBorder(title);

不同的边框有不同的选项用于设置边框的宽度和颜色。SoftBevelBorder类用于构造有柔和拐角的斜面边框,
另外一个LineBorder类也能构造圆拐角。只能通过某个类的构造器构造这些边框,它们没有相应的BorderFactory方法。

常用方法:

方法名方法作用
static Border createLineBorder(Color color)
static Border createLineBorder(Color color,int thickness)创建一个简单的直线边框
----------------------------------------------------------
static MatteBorder createMatteBorder(int top,int left,int bottom,int right,Color color)创建一个用颜色填充的粗边框
static MatteBorder createMatteBorder(int top,int left,int bottom,int right,Icon icon)创建一个用重复图标填充的粗边框
----------------------------------------------------------
static Border createEmptyBorder()创建一个空边框
static Border createEmptyBorder(int top,int left ,int bottom,int right)
----------------------------------------------------------
static Border createEtchedBorder()
static Border createEtchedBorder(Color highlight,Color shadow)
static Border createEtchedBorder(int style)
static Border createEtchedBorder(int type,Color highlight,Color shadow)创建一个具有3D效果的直线边框,type参数是常量EtchedBorder.RAISED和EtchedBorder.LOWERED之一
----------------------------------------------------------
static Border createBevelBorder(int style)
static Border createBevelBorder(int style,Color highlight,Color shadow)创建一个具有凹面或凸面的效果的边框,type参数是BeverlBorder.LOWERED和BevelBorder.RAISED之一
static Border createLoweredBevelBorder()
static Border createRaisedBevelBorder(int style)
----------------------------------------------------------
static TitledBorder createTitledBorde(String title)
static TitledBorder createTitledBorde(Border border)
static TitledBorder createTitledBorde(Border border,String title)
static TitledBorder createTitledBorde(Border border,String title,int justification,int postion)
static TitledBorder createTitledBorde(Border border,String title,int justification,int postion)
static TitledBorder createTitledBorde(Border border,String title,int justification,int postion,Font font)
static TitledBorder createTitledBorde(Border border,String title,int justification,int postion,Font font,Color color)创建一个具有指定属性的带标题的边框justification参数是TitleBorder常量LEFT,CENTER,RIGHT,LEADING,TRAILING,DEFAULT_JUSTIFICATION(左对齐)之一,positon是ABOVE_TOP,TOP,BELOW_TOP,ABOVE_BOTTOM,BOTTOM,BELOW_BOTTOM或DEFAULT_POSITION(上之一)
----------------------------------------------------------
SoftBevelBorder(int type)
SoftBevelBorder(int type,Color highlight,Color shadow)创建一个带有柔和边角的斜面边框。type参数是BevelBorder.LOWERED和BevelBorder.RAISED之一
public LineBorder(Color color,int thickness,boolean roundedCorners)用指定的颜色和粗细创建一个直线边框.如果roundedCorners为true,则边框有圆角
----------------------------------------------------------
void setBorder(Border border)设置这个组件的边框

11.4.4组合框

如果有多个选择项,使用单选按钮就不太适宜了,原因是会占据太多屏幕空间。这时就可以选择组合框当用户点击这个组件时,就下拉一个选择列表,用户可以从中选择一项。

如果想让下拉列表设置成可编辑,就可以像是一个文本域一样编辑当前的选项内容。

在java7中**JComboBox类是一个泛型类**。例如,JComboBox包含String对象,JComboBox包含整数

setEditable方法可以让组合框可编辑

调用getSelecteItem方法可以获取当前的选项,如果组合框是可编辑的,当前选项可能已经编辑过。

如果组合框是不可编辑的最好调用

combo.getItemAt(combo.getSelectedIndex());

可以调用addItem方法增加选项,
示例:

var faceCombo=new JComboBox<String>();
faceCombo.addItem("Serif");
faceCombo.addItem("SansSerif");

这个方法将字符串添加到列表的尾部,也可以利用insertItemAt方法在列表的任意位置插入新的选项:

faceCombo.InsetItemAt("Monospaced",0);//add at the beginning

可以增加任何类型的选项,组合框可以调用每个选项的toString方法显示器内容
如果要删除某些选项,可以使用removeItem或者removeItemAt方法,使用哪个方法取决于参数提供的是想要删除的选项,还是选项位置

faceComboBox.removeItem("Monospaced");
faceCombo.removeItemAt(0);//remove first item

如果需要往组合框中加大量的选项,addItem方法的性能会很差,取而代之我们可以构造一个DefaultBoxModel,并调用addElem方法可以填充这个模型,然后再调用JComboBox的setModel方法

当用户从组合框中选择一个选项时,组合框就产生一个动作事件
为了判断选择了那个选项,可以提供事件参数getSource方法来得到发送这个事件的组合框的引用,接着调用getSelectedItem方法获取当前选择的选,
需要把这个方法的返回值强制转换为适当的类型,通常是String型
示例:

ActionListener listener=event->

lable.setFont(new Font(
	faceCombo.getItem(facecombo.getSelectedIndex()),Font.PLAIN,DEFAULT_SIZE
))
;

常用方法:

方法名方法作用
boolean isEditable()判断是否可以编辑
void setEditable()让组合框的下拉列表可编译
void addItem(Objec item)把一个选项添加到选项列表中
void insertItemAt(Object item,int index)将一个选项插入到选项列表的指定索引位置
void removeItem(Objec item)删除下拉列表里的一项
void removeAllItem(int index)删除指定索引位置的选项
void removeAllItems()删除下拉列表里的所有项
Object getSelectedIted()返回当前选择的项
getItemAt(int index)返回指定索引中的列表项。
int getSelectedIndex()返回与给定项目匹配的列表中的第一个项目。

11.4.5 滑动条
组合框可以让用户从一组离散值中选择,滑动条允许从连续的值中选择,(例如:从1~100之间选择任意数值)
构造滑动条最常用的方法:

var slider=new JSlider(min,max,initialValue);

如果忽略最小值和最大值和初始值,其默认值分别为0,100,50.
如果需要垂直的滑动条,可以按照以下方式调用构造器:

var slider=new JSlider(SwingConstants.VERTICAL,min,max,initialValue);

当用户滑动滑条时,滑动条的值就会再最小值和最大值之间变化。当值放生变化时,ChangeEvent 就会发送给所有变更监听器。为了需要的得到这些变更的通知需要调用AddChangeListener方法并且安装一个实现了ChangeListener的接口对象,在这个回调中可以获取活动条的值

ChangeListener listener=event->{
	JSlider slider=(JSlider)event.getSource();
	int value=slider.getValue();
};

可以通过显示刻度对滑条进行修饰:

slider.setMajorTickSpacing(20);
slider.setMinorTickSpacing(5);

上述滑动条在每20个单位的位置显示一个大刻度标记,每5个单位的位置显示一个小的刻度标记,单位就是滑动条值。

要想让刻度条可见

slider.setPaintTickets(true);

强制让刻度条对齐刻度,只要用户采用对齐模式完成托放滑动条的操作,他就hi立即自动地移动到最接近的刻度

slider.setSnapToTickets(true);

可以调用方法为大苦度添加刻度标记标签

slider.setPaintLabels(true);

隐藏滑动轨迹

slider.setPaintTrack(false);

滑动条逆向

slider.setInverted(true);

常用方法:

方法名方法作用
JSlider()构造一个水平滑条
JSlider(int direction)构造一个给定方向的水平滑条
JSlider(int min,int max)构造一个最大值,最小值的水平滑条
JSlider(int min,int max,int inttialValue)用给定的方向,最大值,最小值,和初始值构造一个水平滑条,direction参数是Swing-Constants.HORIZONTAL或SwingConstants.VERTICAL之一,默认为水平,滑动条的最小值,初始值和最大值,默认值为0,50和100
void setPaintTickets显示刻度
void setMajorTickSpacing(int units)用给定的滑动条设置最大刻度值
void setMinorTickSpacing(int units)用给定的滑动条设置最小刻度值
void setPaintLabels设置刻度值(字)
void setLabelTable(Dictionary table)设置用作刻度标签的组件。表中的每一个键/值都采用new Integer/Component的格式
void setSnapToTicks(true)设置自动靠近最接近的刻度值
void setPaintTrack(true)显示滑动条滑动轨迹
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值