JAVA自学-Swing用户界面组件

9.1 Swing和模型-视图-控制器设计模式

·模型必须实现改变内容和查找内容的方法;模型是完全不可见的,显示存储在模型中的数据是视图的工作;

·对于大多数组建,模型类实现了一个名字以Model结尾的接口;按钮实现了ButtonMode接口;

·模型不存储按钮标签或图标;仅凭模型无法知道它的外观


9.2布局管理器

·按钮放置在一个JPanel对象中,且用流布局管理器管理(默认布局管理器);组件放在容器中,布局管理器决定容器中的组件具体放置的位置和大小;

·边框布局会扩展所有·边框布局管理器是每个JFrame内容窗格的默认布局管理器;

····它允许为每个组件选择一个放置位置;边框组件的厚度不会随窗口大小改变而改变;

····边框组建会扩展所有组件尺寸以便填满可用空间,流布局管理器则维持每个组件的最佳尺寸;···创建边框按钮先创建一个JPanel对象,然后逐一将按钮添加到面板中;

·网格布局:每个单元大小都是一样的,缩放窗口,计算器按钮随之变大或变小,但所有按钮尺寸保持一致;

····构造器:panel.steLayout(new GridLayout(5,4)); ;void pack() 缩放窗口,将组件调整至最佳大小;


9.3文本输入

·文本域和文本区组件用于获取文本输入;文本域(JTextField)只能进行单行文本输入;文本区(JTextArea)能进行多行文本输入;;;JPassword也只能单行文本输入,但不会显示内容;

····三个类均继承于抽象类JTextComponent类,子类获取(get)、设置(set)文本的方法由超类JTextComponent提供;

9.3.1文本域

·把文本域添加到窗口:将文本域添加到面板或其他容器中,与添加按钮相同;构造器 JTextField textField=new JTextField("Default input",20); 用add方法添加,一个文本域,同时初始化,设置文本域宽度为20列(字符宽度);

····运行时重置列数用setColumns;然后运用revalidate方法重新布局:textField.setColums(10); panel.revalidate(); 此方法不是马上改变组件大小;重新计算需要调用validate方法;

····任意时候可以构造文本域使用setText方法,从JTextComponent中继承;将文本域前后空格删除调用trin方法:String text=textField.getText().trim(); ;改变显示文字字体,需要调用setFont方法;

9.3.2标签

·标签是容纳文本的组件,没有任何修饰(边缘),也不影响用户输入;

·可以用标签标识组件:构造一个JLabel组件→将标签组件放在距离需要标识的组件足够近的地方以便用户了解;

·JLabel的构造器允许指定初始文本和图标,也可以选择内容的排列方式;可以用SwingConstants接口中的常量来指定排列方式;

9.3.3密码域

·与常规文本域相同的模型来存储数据;视图改为回显字符

9.3.4文本区

·多行输入使用JTextArae组件来接收输入,每行以“\n”结尾;构造器:textArea=new JTextArea(8,40); 构造8行40列;

····可用setColumns改变列数;用setRows改变函数;;布局管理器会对文本区进行缩放;;;;过长可用自动换行来避免:textArea.setLineWrap(true); 此特性并未添加“\n”字符改变文本内容;

9.3.5滚动窗格

·将文本区插入到滚动窗格中 textArea=new JTextArea(8,40); JScrollPane scrollPane=new JScrollPane(textArea); 如果文本超过文本区,则滚动条将会自动的出现;


9.4选择组件

·复选框

····只接收输入“是”或“否”;复选框自动的带有标识标签;

········指定文本标签:bold = new JCheckBox("Bold"); ;选定或取消复选框:bold.setSelected(true);;方法isSelected返回每个复选框的状态;

·单选按钮

····为单选按钮组构建一个ButtonGroup的对象,将JRadioButton类对象添加到按钮中,在新按钮被按下时,取消前一个被按下的按钮;

·组合框

····文本域和预定的选项组合起来;JCmboBox类提供了组合框的组件;setEditable方法可让组合框成为可编辑状态;getselectedItem方法获取当前的选项或被编辑的文本;方法addItem增加选项;

·滑块

····构造滑块:JSlider slider = new JSlider(min,max,initialValue);默认为0、100和50;垂直滑块JSlider slider = new JSlider(SwingConstants.VERTICAL,min,max,initialValue);

····滑块滑动时,ChangeEvent会发送给所有有变化的监听器,需要调用addChangeListener方法并安装一个实现了ChangeListener接口的对象,用方法StateChanged获取滑块当前值;


9.5菜单

·创建菜单: JNenuBar nemuBar = new JMenuBar();;调用setJMenuBar方法将菜单栏添加到框架上;为每个菜单建立菜单对象: JMenu editMenu = new JMenu("Edit");然后将顶层菜单添加到菜单栏中;

·菜单项中的图标:可以利用JMenuItem(String,Icon)或者JMenuItem(Icon)构造一个图标,也可以用JMenuItem类的setIcon指定一个图标;

·复选框和单选按钮

·弹出菜单:弹出菜单没有标题 JPopupMenu popub = new JPopupMenu();;然后常规添加至菜单项;显示需要调用show方法菜单,调用时给出父组件和相对的父组件坐标的显示位置;

·快捷键:构造字母:JMenuItem aboutItem = new JMenuItem("About", 'A');;构造快捷键:JMenu helpMunu = new JMenu("Help); helpMenu.setMnemonic('H');;

·启动和禁用菜单项:调用setEnabled方法:saveItem.setEnabled(false);;

·工具栏:可以随处移动,可以将它拖拽到框架的四个边框上;JToolBar bar = new JToolBar(); bar.add(blueButton);;用Action对象填充工具栏:bar.add(blueAction;;

·工具提示:光标停留在按钮上,给与提示;Swing中调用setToolText方法将工具添加到JComponent上:exitButton.setToolTipText("Text");


9.6复杂布局管理器

·网格组布局:没有任何限制的网格布局:建立一个GridBagLayout对象→设置成组件的布局管理器→为每个组件建立一个GridBagConstraints对象→添加组件约束:add(component,constraints);;

····约束:1.gridx,gridy,gridwidth和gridheight:定义了组件在网格中的位置与所占行数和列数;

                2.增量域:扩大某区域时自动扩充网格;

                3.fill和anchor参数:不希望组件拉伸使用fill,组建没有填充整个区域可用anchor域指定位置;

                4.填塞:外部填塞:通过设置insets域在组建周围的附加空白区域指定其位置;

                             内部填塞:通过设置ipadx和ipady确保组件不会收缩到最小尺寸之下;

                5.使用帮助类来管理网格组约束:


P376

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值