第17章 创建图形用户界面


1、按钮(常规、复选框、单选框按钮)
     按钮的公共特性在javax.swing.AbstractButton中定义
     AbstractButtom --> JButton
     AbstractButtom --> JToggleButton --> JCheckBox和JRadioButton

 
     ①JButton:
      JButton继承AbstractButton并且提供创建按钮的几个构造方法:
    
     对齐方式:
          水平对齐setHorizontalAlignment(int):LEADING、LEFT、CENTER(默认)、RIGHT、TRAILING
          垂直对齐setVerticalAlignment(int): TOP、CENTER(默认)、BOTTOM
     文本位置:
          水平文本位置:setHorizonTextPosition(int): LEADING、LEFT、CENTER、RIGHT(默认)、TRAILING
          垂直对齐位置:setVerticalTextPosittion(int):  TOP、CENTER(默认)、BOTTOM
      触发事件:
          创建并注册监听器响应ActionEvent事件         
jbt.addActionListener( new ActionListener(){
               public void actionPerformed(ActionEvent e) {
                    ......
              }
     });

     按钮热键:setMnemonic(chat/int)
     提示文本:setToolTipText(String)

     ②复选框JCheckBox:
 
     要知道是否被选中,使用isSelected()方法     
     当点击(选中或取消)一个复选框时,它会触发一个ItemEvent事件,然后触发一个ActionEvent事件。此二者都可以重新显示这个消息:
         
jchkCentered .addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                        messagePanel.setCentered( jchkCentered .isSelected());
              }             
          });

         jchkItalic .addItemListener(new ItemListener(){
               public void itemStateChanged(ItemEvent arg0) {
                    // TODO Auto-generated method stub     
              }
          });

     ③单选按钮JRadioButton:

     为了将单选按钮放在一组,需要创建java.swing.ButtonGroup的一个实例,并且使用add方法把这些单选按钮添加到这个实例中。这样它们在选择时就是互斥的,如果没有创建这个组,就是相互独立的。
          
ButtonGroup group = new ButtonGroup();
          group.add(jrbRed);
          group.add(jrbGreen);
          group.add(jrbBlue);

     触发事件:与复选框类同 

2、标签(JLabel)
     JComponent --> JLabel
              

3、文本域(JTextField)
     JComponent --> JTextComponent --> JTextField和JTextArea

     把光标移动到文本域,然后按下回车键时,会触发一个ActionEvent事件:
     
jpTextField.add(new JLabel("Enter a new message"),BorderLayout.WEST);
     jftMessage.addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent arg0) {
                    // TODO Auto-generated method stub
                    messagePanel.setMessage(String.valueOf( jftMessage.getPassword()));
                    jftMessage.requestFocusInWindow();
              }
          });

     方法pack()可以按照放在框架里的组件的大小自动调整框架的尺寸。
     Component类中定义的requestFocusInWindows()方法请求组件接收输入焦点,在调用 actionPerformed方法后,将会看到光标在 jftMessage
      如果使用一个文本域输入密码,可以用JPassWordFiled替换JTextField,用回显字符隐藏输入的文本,默认*,可以使用setEchoChar(char)方法指定一个新的回显字符, String.valueOf(  jftMessage  .getPassword())可以得到输入的文本。

4、文本区域(JTextArea):
     允许输入多行文本

     JTextArea不处理滚动,但是可以创建一个JScrollPane的对象来保存JTextArea的一个实例,让JScrollPane处理滚动:
JTextArea jtaDescription = new JTextArea();
   JScrollPane scrollPane = new JScrollPane(jtaDescription );


5、组选框(JComboBox)
   
     JComboBox可以在很多其他事件中激发ActionEvent和ItemEvent事件,每当选中一个条目时就会触发一个ActionEvent,每当选中一个新的条目时,JComboBox就会激发ItemEvent事件两次,一次是取消前一个选择条目,另一次是选中当前选择的条目。注意,如果当前条目被重新选择,那么就没有触发ItemEvent。
     要从一个JComboBox菜单中获取数据,可以使用getSelectedItem()方法返回当前已选定的条目,或者使用e.getItem()方法从itemStateChanged(ItemEvent e)处理器中获取条目。

6、列表框(JList)
     与组合框基本相同,但允许用户选择一个或多个值。

     选择模式属性selectionMode:SINGLE_SELECTION(单项选择)、 SINGLE_INTERVAL_SELECTION(单区间选择(选定的项是连续的))、MULTIPLE_INTERVAL_SELECTION(多区间选择(没有限制))。
     列表不能自动滚动,须创建一个滚动窗格并将列表框添加进。
     JList触发javax.swing.ecent.ListSelectionEvent事件,通知用于处理选择的监听器,监听器必须实现javax.swing.event.ListSelectionListener接口中的valueChanged处理器来处理这个事件。
       
jlst.addListSelectionListener(new ListSelectionListener() {
      /** Handle list selection */
            public void valueChanged(ListSelectionEvent e) {
            }   
     });


7、滚动条(JScrollBar)
     
     当用户改变滚动条的值时,滚动条会触发一个AdjustmentEvent的实例,传递给每一个已经注册的监听器,如果一个对象希望滚动条的值发生变化时能够通知它,就必须实现java.awt.event.AdjustmentListener监听器接口中的adjustmentValueChanged方法:
jscbVert.addAdjustmentListener(new AdjustmentListener() {
      public void adjustmentValueChanged(AdjustmentEvent e) {
      }
   });

     水平滚动条的当前值与最大值之间的比 = x的值与消息面板的宽度的比,垂直滚动条类同。

8、滑块(JSlider)

     在JSlider类中getPaintLabels()、getPaintTicks()、getPaintTrack()、getInverted()命名方式较特殊,布尔属性。
     创建一个监听器来实现ChangeListener接口中的stateChanged处理器:
          
 jsldVert.addChangeListener(new ChangeListener() {
           /** Handle scroll bar adjustment actions */
            public void stateChanged(ChangeEvent e) {
          }
        });


9、创建多个窗口
     定义一个指明任务的JFrame的子类,告诉新窗口做什么,然后可以在应用程序中创建该子类的一个实例,通过把它设为可见的框架实例即可出现一个新窗口。
      paintComponent(Graphics g)
           本身这个容器自己画出自己组件的方法了。如果只是为了改变本身这个容器中的组件,只需要改写paintComponent方法就可以了,如果还要保留容器中的原本组件就别忘了调用super.paintComponent(g)。如果要改写paint方法来改变本身这个容器的组件,那么也别忘了要调用super.paint(g),不然出来的东西是不包含原组件、原边框和子组件的。
      public  Dimension getPreferredSize() {
            return  new  Dimension(300, 300);
       }
          getPreferedSize方法是获取组的首选大小,因为布局管理器会根据组件自动调整框架窗口的大小,可以通过这个方法来获取自动调整后的组件大小
     
                 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值