java 程序设计第13章

上传人:san****019 文档编号:16508348 上传时间:2020-10-04 格式:PPT 页数:40 大小:308KB
返回 下载 相关 举报
java 程序设计第13章_第1页
第1页 / 共40页
java 程序设计第13章_第2页
第2页 / 共40页
java 程序设计第13章_第3页
第3页 / 共40页
点击查看更多>>
资源描述
Swing包的特点,JDK1.2以后在支持javax.swing包 Swing包在图形界面设计上比AWT更丰富,更美观。Swing拥有4倍于AWT的用户界面组件。 是AWT包基础上的扩展,在很多情况下在AWT包的部件前加上字母J即为Swing部件的名称,如:JFrame、JApplet、JButton等。,JFrame,在JFrame中不能直接调用add方法加入部件,而是要通过getContentPane获得一个容器(Container)对象,再调用这个容器对象的add 方法加入其它部件。这点是所有Swing的容器部件均有的特性 在JFrame中可以设置用户关闭窗体时在执行windowClosing()方法后的默认处理操作。如果没有注册窗体关闭处理,也将执行默认处理操作。,默认处理操作的设置方法,void setDefaultCloseOperation(int operation) 其中参数operation为一个整数,可以是以下常量: DO_NOTHING_ON_CLOSE:不做任何处理; HIDE_ON_CLOSE: 为默认处理情形,自动隐藏窗体。 DISPOSE_ON_CLOSE:自动隐藏和关闭窗体。 EXIT_ON_CLOSE: 仅用于应用程序中,关闭窗体、结束程序运行。,例13-1一个简单的演示,import java.awt.*;import javax.swing.*;import java.awt.event.*;public class ContentDemo public static void main(String args) JFrame f = new JFrame(Demo); Container cont=f.getContentPane(); cont.setLayout(new FlowLayout(); for (int i=1;i=8;i+) cont.add(new JButton(Button #+i); f.setSize(300,300); f.setVisible(true); f.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.out.println(execute windowClosing ); ); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ,等级考试试题,/打印无符号整数位 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Java_3 extends JFrame public Java_3() super( 打印无符号整数位 ); Container c = getContentPane(); c.setLayout( new FlowLayout() ); c.add( new JLabel( 请输入整数: ) ); final JTextField output = new JTextField( 33 ); JTextField input = new JTextField( 10 );,input.addActionListener( new ActionListener() public void actionPerformed( ActionEvent e ) int val = Integer.parseInt( e.getActionCommand() ); output.setText( getBits( val ) ); ); c.add( input ); c.add( new JLabel( 该数的二进制位表示是 ) ); output.setEditable( false ); /*Found* c.add( _ ); setSize( 720, 70 ); show(); ,private String getBits( int value ) int displayMask = 1 31; StringBuffer buf = new StringBuffer( 35 ); for ( int c = 1; c = 32; c+ ) buf.append( ( value ,public static void main( String args ) Java_3 app = new Java_3(); app.addWindowListener( new WindowAdapter() /*Found* public void windowClosing( _ e ) System.exit( 0 ); ); ,13.2.2 JApplet,若Applet中包含Swing构件,则必须继承JApplet类。JApplet是顶层Swing容器,包含一个根面板,根面板中包含一个内容面板,内容面板中可以加入除了菜单条之外的所有Swing构件。对JApplet进行布局管理是针对内容面板,而不是JApplet。向JApplet中添加构件,不能直接添加,而是添加到内容面板。JApplet的默认布局管理器是BorderLayout,而Applet的默认布局管理器是FlowLayout。,例13-2: 投掷筛子的程序。,import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ClickableDice extends JApplet int value1= 4; /筛子的初始点数. int value2= 4; /筛子的初始点数. MyPanel dice; public void init() dice = new MyPanel(); setContentPane(dice); /设置创建的面板为内容面板 JButton b=new JButton(push me);dice.setLayout(new BorderLayout(); dice.add(South,b);,b.addActionListener(new ActionListener() public void actionPerformed(ActionEvent evt) value1 = (int)(Math.random()*6) + 1; value2 = (int)(Math.random()*6) + 1; dice.repaint(); ); ,例13-2:续1,void draw(Graphics g, int val, int x, int y) /绘制筛子上面的点 g.setColor(Color.white); g.fillRect(x, y, 35, 35); /筛子画面清除 g.setColor(Color.black); g.drawRect(x, y, 34, 34); /绘制筛子边框 if (val 1) / 左上角的点 g.fillOval(x+3, y+3, 9, 9); if (val 3) / 右上角的点 g.fillOval(x+23, y+3, 9, 9);,例13-2:续2,if (val = 6) / 中间左边的点 g.fillOval(x+3, y+13, 9, 9); if (val % 2 = 1) / 正中央 g.fillOval(x+13, y+13, 9, 9); if (val = 6) / 中间右边的点 g.fillOval(x+23, y+13, 9, 9); if (val 3) / 底部左边的点 g.fillOval(x+3, y+23, 9, 9); if (val 1) / 底部右边的点 g.fillOval(x+23, y+23, 9,9); ,例13-2:续3,class MyPanel extends JPanel public void paintComponent(Graphics g) super.paintComponent(g); /调用父类方法绘制背景 draw(g, value1, 10, 10); /在10,10位置绘制筛子 draw(g, value2, 120, 10); /在120,10位置绘制筛子 ,例13-2:续4,13.2.3 Swing中的按钮和标签 标签和各种按钮均允许设置图标,构造方法的一种: JLabel(String str,Icon icon,int align) 也可以在创建了标签对象后通过setIcon方法设置标签的图标。 void setIcon(Icon icon) 在所有图形部件的父类JComponent类中定义了如下方法: void setToolTipText(String text) 功能:设置鼠标移到部件上时的提示文字。,例13-3 用户登录界面设计,import java.awt.*; import javax.swing.*; public class ContentDemo extends JFrame JTextField username; JPasswordField password; JButton login,register; public ContentDemo() super(login frame); Container cont=getContentPane(); cont.setLayout(new GridLayout(3,2); cont.add(new JLabel(username:); username=new JTextField(10); cont.add(username); cont.add(new JLabel(password:); password=new JPasswordField(10); cont.add(password);,login=new JButton(new ImageIcon(enter.gif); register=new JButton(new ImageIcon(register.gif); cont.add(login); cont.add(register); setSize(200,200); setVisible(true); public static void main(String args) new ContentDemo(); ,JScroolPane容器,例13-4在文本域中显示拆分结果。 import java.awt.*; import javax.swing.*; public class factorial extends JApplet public void init() String output=; JTextArea outputarea = new JTextArea(10,50); JScrollPane scroll=new JScrollPane(outputarea); Container container = getContentPane(); container.add(scroll); for(long i=0; i=10; i+) output += + i + ! = + fac(i) +n; outputarea.append(output); public long fac(long no) 求n的阶乘 . ,工具栏 -JTollbar,import java.awt.*; import javax.swing.*; public class ToolBarDemo extends JApplet public void init() Container cont=getContentPane(); cont.setLayout(new BorderLayout(); JToolBar tool=new JToolBar(); Image myImage = getImage(getDocumentBase(), open.gif); JButton open = new JButton(new ImageIcon(myImage); myImage = getImage(getDocumentBase(), folder.gif ); JButton mail=new JButton(new ImageIcon(myImage); tool.add(open); tool.add(mail); cont.add(North,tool); JScrollPane scroll=new JScrollPane(new JTextArea(); cont.add(Center, scroll); ,JOptionPane对话框,JoptionPane的对话框可分为四类: ShowMessageDialog : 向用户显示一些消息; showInputDialog : 提示用户进行输入; showConfirmDialog : 向用户确认,含yes/no/cancel响应; showOptionDialog : 选项对话框,该对话框是前面几种形态的综合。,对话框的外观,显示消息对话框showMessageDialog,格式:static void showMessageDialog(Component parentComponent, Object message, String title, int messageType, Icon icon) 其中, 参数1定义对话框的父窗体,如果该参数为null,一个运行Java程序的默认窗体作为父窗体,并且在父窗体中居中显示对话框; 参数2为消息内容,可以是任何存放数据的部件或数据对象本身; 参数3为对话框的标题;,参数4为消息类型,内定的消息类型包括: ERROR_MESSAGE(错误消息) INFORMATION_MESSAGE(信息) WARNING_MESSAGE(警告消息) QUESTION_MESSAGE(询问消息) PLAIN_MESSAGE(一般消息); 参数5为显示图标,缺少该参数时,根据消息类型有默认的显示图标。,提示输入对话框showInputDialog,格式1:static String showInputDialog(Object message) 最复杂的形态涉及7个参数,分别表示父窗体、消息、标题、消息类型、图标、可选值、初始值。 static Object showInputDialog(Component parentComponent, Object message, String title, int messageType, Icon icon, Object selectionValues, Object initialSelectionValue),确认对话框showConfirmDialog,最简单只包含两个参数。 格式:static int showConfirmDialog(Component parentComponent, Object message) 该对话框显示时包含3个选项Yes, No and Cancel,标题默认为Select an Option。 最复杂的形式有6个参数,具体格式如下: static int showConfirmDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon),选项对话框showOptionDialog,格式:static int showOptionDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon, Object options, Object initialValue) 使用举例: Object options = OK, CANCEL ; JOptionPane.showOptionDialog(null, Click OK to continue, Warning, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options0); 显示一个警告对话框,包括 OK, CANCEL两个选项, 标题为“Warning”,显示消息为 “Click OK to continue”。,等级考试上机题,import javax.swing.JOptionPane; public class Java_1 public static void main( String args ) /变量初始化 int passes = 0, /考生通过的数目 failures = 0, /考生不通过的数目 student = 1, /学生计数器 result; /一门考生结果 String input, /用户输入的值 output; /输出字符串,/处理10名学生,用计数器控制循环 while ( student = 10 ) input = JOptionPane.showInputDialog( 输入结果(1=通过,2=不通过) ); /*Found* result = Integer._( input ); if ( result = 1 ) passes = passes + 1; else failures = failures + 1; student = student + 1; ,/结果处理 output = 通过: + passes + n不通过: + failures; if( passes 8 ) output = output + n提高学费; /*Found* JOptionPane._ ( null, output, 对考试结果的分析示例, JOptionPane.INFORMATION_MESSAGE ); /*Found* System._( 0 ); ,等级考试试题2,import javax.swing.*; public class Java_2 public static void main( String args ) int frequency1 = 0, frequency2 = 0, frequency3 = 0, frequency4 = 0, frequency5 = 0, frequency6 = 0, face; /骰子旋转500次的代码 for ( int roll = 1; roll = 500; roll+ ) face = 1 + (int) ( Math.random() * 6 ); /*Found* switch ( _ ) case 1: +frequency1; break;,case 2: +frequency2; break; case 3: +frequency3; break; case 4: +frequency4; break; case 5: +frequency5; break; case 6: +frequency6; break; ,/*Found* JTextArea outputArea = _ JTextArea( 7, 10 ); outputArea.setText( 面t频率 + n1t + frequency1 + n2t + frequency2 + n3t + frequency3 + n4t + frequency4 + n5t + frequency5 + n6t + frequency6 );,/*Found* JOptionPane.showMessageDialog( null, _, 骰子旋转500次, JOptionPane.INFORMATION_MESSAGE ); /*Found* System._( 0 ); ,颜色对话框,在JColorChooser类中有一个静态方法可以弹出对话框选择颜色。具体格式如下: static Color showDialog(Component component, String title, Color initialColor) 其中,参数component指出对话框依赖的组件,title为对话框的标题,initialColor指定对话框显示时的初始颜色设置。,例13-7 给围棋棋盘背景选择颜色,change=new JButton(改变背景); cont.add(South,change); change.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Color boardColor =JColorChooser.showDialog(Simplechess.this, 棋盘颜色, chessboard.getBackground(); chessboard.setBackground(boardColor); );,13.2.7选项卡 -JTabbedPane,通过addTab方法可以给选项卡中添加选项,该方法有多种形态,以下为常用形式: void addTab(String title, Component component) 在选项卡中增加一个用标题代表的部件,无图标。 void addTab(String title, Icon icon, Component component) 在选项卡中增加一个部件,该选项通过标题、图标表示,其中,标题和图标可以存在,也可以某个为null。,点击选项卡的会发生状态改变事件,首先必须注册ChangeListener监听者。 void addChangeListener(ChangeListener l) 在监听者的类设计中必须实现ChangeListener接口,也就是要编写如下处理方法: public void stateChanged(ChangeEvent e) 在事件处理编程中,可以利用JTabbedPane提供了getSelectedIndex()方法获取当前选中的选项卡序号,从而进一步实现其他处理,例13-7 选项卡的应用,import java.awt.*; import javax.swing.*; import javax.swing.event.*; public class TestTabbedPane extends JFrame implements ChangeListener JTabbedPane jtp; JPanel jp = new JPanel4; /定义有4个元素的面板数组 int currentIndex=0; Color color=Color.red,Color.green,Color.blue,Color.white; String des=红色卡,绿色卡,兰色卡,白色卡;,public TestTabbedPane() Container cont=getContentPane(); jtp=new JTabbedPane(); for (int i=0;i4;i+) jpi=new JPanel(); /创建面板对象 jpi.setBackground(colori); /设置面板的背景 jtp.addTab(desi,jpi); /将面板加入选项卡 jtp.addChangeListener(this); cont.add(jtp); /将选项卡加入窗体中 setSize(300,150); setVisible(true); ,public void stateChanged(ChangeEvent e) if (e.getSource()=jtp) int i=(JTabbedPane)e.getSource().getSelectedIndex(); this.setTitle(选择了+desi); /设置窗体的标题 public static void main(String args) new TestTabbedPane(); ,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!