100个Java经典例子(21-30)初学者的利器高手的宝典JavaSE

来源:互联网 发布:vb机器视觉编程 编辑:程序博客网 时间:2024/05/05 19:50
view plainprint?
  1. package test21;  
  2.   
  3. import javax.swing.JDesktopPane;  
  4. import javax.swing.JMenu;  
  5. import javax.swing.JMenuItem;  
  6. import javax.swing.JMenuBar;  
  7. import javax.swing.JFrame;  
  8. import javax.swing.KeyStroke;  
  9.   
  10. import java.awt.event.*;  
  11. import java.awt.*;  
  12. /** 
  13.  * Title: 内部窗体演示 
  14.  * Description: 这是演示一个内部窗体。可以选择“新文档”菜单不停的生成内部窗体。 
  15.  * Filename:  
  16.  */  
  17. public class InternalFrameDemo extends JFrame  
  18.                                implements ActionListener {  
  19.     
  20.     private static final long serialVersionUID = 1L;  
  21.     JDesktopPane desktop;  
  22. /** 
  23.  *方法说明:构造器,添加窗体成员 
  24.  *输入参数: 
  25.  *返回类型: 
  26.  */  
  27.     public InternalFrameDemo() {  
  28.         super("InternalFrameDemo");  
  29.   
  30.         //这里设置了一个比较大的窗体,给四周只留了50px的边界  
  31.         int inset = 50;  
  32.         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();  
  33.         setBounds(inset, inset,  
  34.                   screenSize.width  - inset*2,  
  35.                   screenSize.height - inset*2);  
  36.           
  37.         //定义界面  
  38.         desktop = new JDesktopPane(); //桌面面板  
  39.         createFrame(); //创建第一个内部窗体  
  40.         setContentPane(desktop);//将桌面添加到窗体  
  41.         setJMenuBar(createMenuBar());  
  42.   
  43.         //设置托拽模式  
  44.         desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);  
  45.     }  
  46. /** 
  47.  *方法说明:组建菜单 
  48.  *输入参数: 
  49.  *返回类型: 
  50.  */  
  51.     protected JMenuBar createMenuBar() {  
  52.         JMenuBar menuBar = new JMenuBar();  
  53.   
  54.         //定义一个菜单  
  55.         JMenu menu = new JMenu("文件");  
  56.         menu.setMnemonic(KeyEvent.VK_D);  
  57.         menuBar.add(menu);  
  58.   
  59.         //定义“新文档”菜单  
  60.         JMenuItem menuItem = new JMenuItem("新文档");  
  61.         menuItem.setMnemonic(KeyEvent.VK_N);  
  62.         menuItem.setAccelerator(KeyStroke.getKeyStroke(  
  63.                 KeyEvent.VK_N, ActionEvent.ALT_MASK));  
  64.         menuItem.setActionCommand("new");  
  65.         menuItem.addActionListener(this);  
  66.         menu.add(menuItem);  
  67.   
  68.         //定义“退出”菜单  
  69.         menuItem = new JMenuItem("退出");  
  70.         menuItem.setMnemonic(KeyEvent.VK_Q);  
  71.         menuItem.setAccelerator(KeyStroke.getKeyStroke(  
  72.                 KeyEvent.VK_Q, ActionEvent.ALT_MASK));  
  73.         menuItem.setActionCommand("quit");  
  74.         menuItem.addActionListener(this);  
  75.         menu.add(menuItem);  
  76.   
  77.         return menuBar;  
  78.     }  
  79. /** 
  80.  *方法说明:事件监听,对选择的菜单做出反映 
  81.  *输入参数:ActionEvent e 事件 
  82.  *返回类型: 
  83.  */  
  84.     public void actionPerformed(ActionEvent e) {  
  85.         if ("new".equals(e.getActionCommand())) { //新文档  
  86.             createFrame();  
  87.         } else { //退出  
  88.             quit();  
  89.         }  
  90.     }  
  91. /** 
  92.  *方法说明:调用MyInternalFrame类创建新的内部窗体, 
  93.  *输入参数: 
  94.  *返回类型: 
  95.  */  
  96.     protected void createFrame() {  
  97.         MyInternalFrame frame = new MyInternalFrame();  
  98.           
  99.         frame.setVisible(true);   
  100.         desktop.add(frame);  
  101.         try {  
  102.             frame.setSelected(true);  
  103.         } catch (java.beans.PropertyVetoException e) {}  
  104.     }  
  105. /** 
  106.  *方法说明:退出程序 
  107.  *输入参数: 
  108.  *返回类型: 
  109.  */  
  110.     protected void quit() {  
  111.         System.exit(0);  
  112.     }  
  113. /** 
  114.  *方法说明:主方法 
  115.  *输入参数: 
  116.  *返回类型: 
  117.  */  
  118.     public static void main(String[] args) {  
  119.         JFrame.setDefaultLookAndFeelDecorated(true);  
  120.   
  121.         //建立一个内部窗体  
  122.         InternalFrameDemo frame = new InternalFrameDemo();  
  123.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  124.   
  125.         //显示窗体  
  126.         frame.setVisible(true);  
  127.     }  
  128. }  
view plainprint?
  1. package test21;  
  2.   
  3. import javax.swing.JInternalFrame;  
  4. import javax.swing.JTextArea;  
  5.   
  6. /** 
  7.  * Title: 内部窗体 
  8.  * Description: 生成一个内部窗体,提供InternalFrameDemo类使用 
  9.  * Filename: MyInternalFrame.java 
  10.  */  
  11. public class MyInternalFrame extends JInternalFrame {  
  12.     
  13.     private static final long serialVersionUID = 1L;  
  14.     static int openFrameCount = 0;  
  15.     static final int xOffset = 30, yOffset = 30;  
  16.   
  17.     public MyInternalFrame() {  
  18.         super("文档 #" + (++openFrameCount),   
  19.               true//可变尺寸  
  20.               true//有关闭按钮  
  21.               true//有最大化按钮  
  22.               true);//最小化按钮  
  23.   
  24.         //给内部窗体添加一个文本域  
  25.         JTextArea j = new JTextArea(5,20);  
  26.         getContentPane().add(j);  
  27.         //设置内部窗体的大小  
  28.         setSize(300,300);  
  29.   
  30.         //设置内部窗体的显示位置  
  31.         setLocation(xOffset*openFrameCount, yOffset*openFrameCount);  
  32.     }  
  33. }  

view plainprint?
  1. package test22;  
  2.   
  3. import java.awt.*;  
  4. import javax.swing.*;  
  5. import javax.swing.event.*;  
  6.   
  7. /** 
  8.  * Title: 分割面板 
  9.  * Description: 演示将面板分割成左右两部分 
  10.  * Fiename:SplitPaneDemo.java  
  11.  */  
  12. public class SplitPaneDemo implements ListSelectionListener {  
  13.     private String[] imageNames={"Bird.gif","Cat.gif","Dog.gif","Pig.gif"};  
  14.     private JLabel picture;  
  15.     private JList list;  
  16.     private JSplitPane splitPane;  
  17. /** 
  18.  *方法说明:构造器,定义了所有要使用的构件 
  19.  *输入参数: 
  20.  *返回类型: 
  21.  */  
  22.     public SplitPaneDemo() {  
  23.           
  24.         //创建一个图像名称的列表,设置为单选方式  
  25.         list = new JList(imageNames);  
  26.         list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);  
  27.         list.setSelectedIndex(0);  
  28.         list.addListSelectionListener(this);  
  29.         JScrollPane listScrollPane = new JScrollPane(list);  
  30.   
  31.         //获取默认的图片  
  32.         ImageIcon firstImage = createImageIcon("images/" +  
  33.                                      (String)imageNames[0]);  
  34.         if (firstImage != null) {  
  35.             picture = new JLabel(firstImage);  
  36.             picture.setPreferredSize(new Dimension(firstImage.getIconWidth(),  
  37.                                                    firstImage.getIconHeight()));  
  38.         } else {  
  39.             picture = new JLabel((String)imageNames[0]);  
  40.         }  
  41.         JScrollPane pictureScrollPane = new JScrollPane(picture);  
  42.   
  43.         //创建一个水平分割的面板,定义了两个面板的名字。  
  44.         splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,  
  45.                                    listScrollPane, pictureScrollPane);  
  46.         splitPane.setOneTouchExpandable(true);  
  47.         splitPane.setDividerLocation(150);  
  48.   
  49.         //定义面板的最小尺寸  
  50.         Dimension minimumSize = new Dimension(10050);  
  51.         listScrollPane.setMinimumSize(minimumSize);  
  52.         pictureScrollPane.setMinimumSize(minimumSize);  
  53.   
  54.         //定义初始尺寸  
  55.         splitPane.setPreferredSize(new Dimension(400200));  
  56.     }  
  57. /** 
  58.  *方法说明:获得这个分割的面板 
  59.  *输入参数: 
  60.  *返回类型:JSplitPane 对象 
  61.  */  
  62.     public JSplitPane getSplitPane() {  
  63.         return splitPane;  
  64.     }  
  65. /** 
  66.  *方法说明:列表监听事件处理 
  67.  *输入参数:ListSelectionEvent e 列表选择事件 
  68.  *返回类型: 
  69.  */  
  70.     public void valueChanged(ListSelectionEvent e) {  
  71.         if (e.getValueIsAdjusting())  
  72.             return;  
  73.   
  74.         JList theList = (JList)e.getSource();  
  75.         if (theList.isSelectionEmpty()) {  
  76.             picture.setIcon(null);  
  77.             picture.setText(null);  
  78.         } else {  
  79.             int index = theList.getSelectedIndex();  
  80.             ImageIcon newImage = createImageIcon("images/" +  
  81.                                      (String)imageNames[index]);  
  82.             picture.setIcon(newImage);  
  83.             if (newImage != null) {  
  84.                 picture.setText(null);  
  85.                 picture.setPreferredSize(new Dimension(newImage.getIconWidth(),  
  86.                                                        newImage.getIconHeight() ));  
  87.             } else {  
  88.                 picture.setText("Image not found: "  
  89.                                 + (String)imageNames[index]);  
  90.             }  
  91.             picture.revalidate();  
  92.         }  
  93.     }  
  94. /** 
  95.  *方法说明:根据路径获取图形对象 
  96.  *输入参数:String path 图片路径 
  97.  *返回类型:ImageIcon 图片对象 
  98.  */  
  99.     protected static ImageIcon createImageIcon(String path) {  
  100.         java.net.URL imgURL = SplitPaneDemo.class.getResource(path);  
  101.         if (imgURL != null) {  
  102.             return new ImageIcon(imgURL);  
  103.         } else {  
  104.             System.err.println("Couldn't find file: " + path);  
  105.             return null;  
  106.         }  
  107.     }  
  108. /** 
  109.  *方法说明:主方法 
  110.  *输入参数: 
  111.  *返回类型: 
  112.  */  
  113.     public static void main(String[] args) {  
  114.         JFrame.setDefaultLookAndFeelDecorated(true);  
  115.   
  116.         //定义窗体  
  117.         JFrame frame = new JFrame("SplitPaneDemo");  
  118.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  119.         SplitPaneDemo splitPaneDemo = new SplitPaneDemo();  
  120.         frame.getContentPane().add(splitPaneDemo.getSplitPane());  
  121.   
  122.         //显示窗体  
  123.         frame.pack();  
  124.         frame.setVisible(true);  
  125.     }  
  126. }  

view plainprint?
  1. package test23;  
  2.   
  3. import java.awt.*;  
  4. import java.awt.event.*;  
  5. import javax.swing.*;  
  6. import javax.swing.event.*;  
  7. /** 
  8.  * Title: 滑动杆演示 
  9.  * Description: 使用滑动杆控制定时器,来控制图片的播放速度 
  10.  * Filename: SliderDemo.java 
  11.  */  
  12. public class SliderDemo extends JPanel  
  13.                         implements ActionListener,  
  14.                                    WindowListener,  
  15.                                    ChangeListener {  
  16.   
  17.     private static final long serialVersionUID = 1L;  
  18.     //设置图片的参数  
  19.     static final int FPS_MIN = 0//设置最小值  
  20.     static final int FPS_MAX = 30//设置最大值  
  21.     static final int FPS_INIT = 15;  //初始数值  
  22.     int frameNumber = 0;  
  23.     int NUM_FRAMES = 14;  
  24.     ImageIcon[] images = new ImageIcon[NUM_FRAMES];  
  25.     int delay;  
  26.     Timer timer;  
  27.     boolean frozen = false;  
  28.   
  29.     //这个标签用来显示这只小狗  
  30.     JLabel picture;  
  31.   
  32.     public SliderDemo() {  
  33.         setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));  
  34.   
  35.         delay = 1000 / FPS_INIT;  
  36.   
  37.         //信息提示标签  
  38.         JLabel sliderLabel = new JLabel("调整滑动杆,改变播放速度!", JLabel.CENTER);  
  39.         sliderLabel.setAlignmentX(Component.CENTER_ALIGNMENT);  
  40.   
  41.         //创建一个滑动杆,定义了最小值和最大值以及初始值  
  42.         JSlider framesPerSecond = new JSlider(JSlider.HORIZONTAL,  
  43.                                               FPS_MIN, FPS_MAX, FPS_INIT);  
  44.         framesPerSecond.addChangeListener(this);  
  45.   
  46.         //定义滑动杆参数  
  47.         framesPerSecond.setMajorTickSpacing(10);//每10刻度标注一次  
  48.         framesPerSecond.setMinorTickSpacing(1);//最小刻度为1  
  49.         framesPerSecond.setPaintTicks(true);//绘制滑动杆上的刻度  
  50.         framesPerSecond.setPaintLabels(true);//在滑动过程中绘制滑动块  
  51.         framesPerSecond.setBorder(  
  52.                 BorderFactory.createEmptyBorder(0,0,10,0));  
  53.   
  54.         //定义一个用来显示图片的标签  
  55.         picture = new JLabel();  
  56.         picture.setHorizontalAlignment(JLabel.CENTER);  
  57.         picture.setAlignmentX(Component.CENTER_ALIGNMENT);  
  58.         picture.setBorder(BorderFactory.createCompoundBorder(  
  59.                 BorderFactory.createLoweredBevelBorder(),  
  60.                 BorderFactory.createEmptyBorder(10,10,10,10)));  
  61.         updatePicture(0); //显示第一张图  
  62.   
  63.         //将成员添加到面板上  
  64.         add(sliderLabel);  
  65.         add(framesPerSecond);  
  66.         add(picture);  
  67.         setBorder(BorderFactory.createEmptyBorder(10,10,10,10));  
  68.   
  69.         //设置一个定时器来触发这个事件  
  70.         timer = new Timer(delay, this);  
  71.         timer.setInitialDelay(delay * 7); //在每轮循环停顿时间  
  72.         timer.setCoalesce(true);//设置重复循环  
  73.     }  
  74. /** 
  75.  *方法说明:添加一个窗体监听 
  76.  *输入参数: 
  77.  *返回类型: 
  78.  */  
  79.     void addWindowListener(Window w) {  
  80.         w.addWindowListener(this);  
  81.     }  
  82.     public void windowIconified(WindowEvent e) {  
  83.         stopAnimation();  
  84.     }  
  85.     public void windowDeiconified(WindowEvent e) {  
  86.         startAnimation();  
  87.     }  
  88.     public void windowOpened(WindowEvent e) {}  
  89.     public void windowClosing(WindowEvent e) {}  
  90.     public void windowClosed(WindowEvent e) {}  
  91.     public void windowActivated(WindowEvent e) {}  
  92.     public void windowDeactivated(WindowEvent e) {}  
  93. /** 
  94.  *方法说明:对滑动杆进行监听 
  95.  *输入参数:ChangeEvent e 滑动杆变动事件 
  96.  *返回类型: 
  97.  */  
  98.     public void stateChanged(ChangeEvent e) {  
  99.         JSlider source = (JSlider)e.getSource();  
  100.         if (!source.getValueIsAdjusting()) {  
  101.             int fps = (int)source.getValue();//获得滑动杆的值  
  102.             if (fps == 0) {  
  103.                 if (!frozen) stopAnimation();  
  104.             } else {  
  105.                 delay = 1000 / fps;  
  106.                 timer.setDelay(delay);  
  107.                 timer.setInitialDelay(delay * 10);  
  108.                 if (frozen) startAnimation();  
  109.             }  
  110.         }  
  111.     }  
  112. /** 
  113.  *方法说明:开始动画 
  114.  *输入参数: 
  115.  *返回类型: 
  116.  */  
  117.     public void startAnimation() {  
  118.         timer.start();  
  119.         frozen = false;  
  120.     }  
  121. /** 
  122.  *方法说明:停止动画 
  123.  *输入参数: 
  124.  *返回类型: 
  125.  */  
  126.     public void stopAnimation() {  
  127.         timer.stop();  
  128.         frozen = true;  
  129.     }  
  130. /** 
  131.  *方法说明:事件监听 
  132.  *输入参数: 
  133.  *返回类型: 
  134.  */  
  135.     public void actionPerformed(ActionEvent e) {  
  136.         //改变图片帧  
  137.         if (frameNumber == (NUM_FRAMES - 1)) {  
  138.             frameNumber = 0;  
  139.         } else {  
  140.             frameNumber++;  
  141.         }  
  142.   
  143.         updatePicture(frameNumber); //显示下张图  
  144.   
  145.         if ( frameNumber==(NUM_FRAMES - 1)  
  146.           || frameNumber==(NUM_FRAMES/2 - 1) ) {  
  147.             timer.restart();  
  148.         }  
  149.     }  
  150. /** 
  151.  *方法说明:绘制当前帧 
  152.  *输入参数:int frameNum 图片帧数数 
  153.  *返回类型: 
  154.  */  
  155.     protected void updatePicture(int frameNum) {  
  156.         if (images[frameNumber] == null) {  
  157.             images[frameNumber] = createImageIcon("images/doggy/T"  
  158.                                                   + frameNumber  
  159.                                                   + ".gif");  
  160.         }  
  161.   
  162.         //绘制图片  
  163.         if (images[frameNumber] != null) {  
  164.             picture.setIcon(images[frameNumber]);  
  165.         } else { //如果没有发现图片  
  166.             picture.setText("image #" + frameNumber + " not found");  
  167.         }  
  168.     }  
  169. /** 
  170.  *方法说明:获取图片 
  171.  *输入参数:String path 图片路径 
  172.  *返回类型:ImageIcon 图片对象 
  173.  */  
  174.     protected static ImageIcon createImageIcon(String path) {  
  175.         java.net.URL imgURL = SliderDemo.class.getResource(path);  
  176.         if (imgURL != null) {  
  177.             return new ImageIcon(imgURL);  
  178.         } else {  
  179.             System.err.println("Couldn't find file: " + path);  
  180.             return null;  
  181.         }  
  182.     }  
  183. /** 
  184.  *方法说明:主方法 
  185.  *输入参数: 
  186.  *返回类型: 
  187.  */  
  188.     public static void main(String[] args) {  
  189.         JFrame.setDefaultLookAndFeelDecorated(true);  
  190.   
  191.         //定义窗体  
  192.         JFrame frame = new JFrame("SliderDemo");  
  193.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  194.   
  195.         //实例化本类  
  196.         SliderDemo animator = new SliderDemo();  
  197.         animator.setOpaque(true);  
  198.         frame.setContentPane(animator);  
  199.   
  200.         //显示窗体  
  201.         frame.pack();  
  202.         frame.setVisible(true);  
  203.         animator.startAnimation();   
  204.     }  
  205. }  

view plainprint?
  1. package test24;  
  2.   
  3. import java.awt.*;  
  4. import javax.swing.*;  
  5. import javax.swing.event.*;  
  6.   
  7. /** 
  8.  * Title: 颜色选择器 
  9.  * Description: 演示一个颜色选择器,可以从样本中选择,可以使用HSB模式和RGB模式 
  10.  * Filename: ColorChooserDemo.java 
  11.  */  
  12.   
  13. public class ColorChooserDemo extends JPanel  
  14.                               implements ChangeListener {  
  15.   
  16.      
  17.     private static final long serialVersionUID = 1L;  
  18.     protected JColorChooser tcc;  
  19.     protected JLabel banner;  
  20.   
  21.     public ColorChooserDemo() {  
  22.         super(new BorderLayout());  
  23.   
  24.         //设置一个标签,做广告的。也用来显示用户选择的颜色。  
  25.         banner = new JLabel("欢迎使用颜色选择器!",  
  26.                             JLabel.CENTER);  
  27.         banner.setForeground(Color.yellow);  
  28.         banner.setBackground(Color.blue);  
  29.         banner.setOpaque(true);  
  30.         banner.setFont(new Font("SansSerif", Font.BOLD, 24));  
  31.         banner.setPreferredSize(new Dimension(10065));  
  32.   
  33.         JPanel bannerPanel = new JPanel(new BorderLayout());  
  34.         bannerPanel.add(banner, BorderLayout.CENTER);  
  35.         bannerPanel.setBorder(BorderFactory.createTitledBorder("广告"));  
  36.   
  37.         //设置选择颜色选择器  
  38.         tcc = new JColorChooser(banner.getForeground());//设置初始颜色  
  39.         tcc.getSelectionModel().addChangeListener(this);//给所有模式添加监听  
  40.         tcc.setBorder(BorderFactory.createTitledBorder("选择颜色"));  
  41.   
  42.         add(bannerPanel, BorderLayout.CENTER);  
  43.         add(tcc, BorderLayout.PAGE_END);  
  44.     }  
  45. /** 
  46.  *方法说明:事件监听。用户选择颜色触发 
  47.  *输入参数:ChangeEvent e 用户选择事件 
  48.  *返回类型: 
  49.  */  
  50.     public void stateChanged(ChangeEvent e) {  
  51.         Color newColor = tcc.getColor();//获取用户选择的颜色  
  52.         banner.setForeground(newColor);  
  53.     }  
  54. /** 
  55.  *方法说明:主方法 
  56.  *输入参数: 
  57.  *返回类型: 
  58.  */  
  59.     public static void main(String[] args) {  
  60.         JFrame.setDefaultLookAndFeelDecorated(true);  
  61.   
  62.         //创建窗体  
  63.         JFrame frame = new JFrame("ColorChooserDemo");  
  64.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  65.   
  66.         //创建面板容器  
  67.         JComponent newContentPane = new ColorChooserDemo();  
  68.         newContentPane.setOpaque(true);  
  69.         frame.setContentPane(newContentPane);  
  70.   
  71.         //显示窗体  
  72.         frame.pack();  
  73.         frame.setVisible(true);  
  74.     }  
  75. }  


view plainprint?
  1. package test25;  
  2.   
  3. import javax.swing.JTable;  
  4. import javax.swing.table.AbstractTableModel;  
  5.   
  6. import javax.swing.JScrollPane;  
  7. import javax.swing.JFrame;  
  8. import java.awt.*;  
  9. import java.awt.event.*;  
  10. /** 
  11.  * Title: 自己定义的表格 
  12.  * Description: 继承AbstractTableModel类,实现自己的表格 
  13.  * Flename: MyTableDemo.java 
  14.  */  
  15. public class MyTableDemo extends JFrame {  
  16.   
  17.     
  18.     private static final long serialVersionUID = 1L;  
  19.     public MyTableDemo() {  
  20.         super("MyTableDemo");  
  21.         //声明自己的表格,并添加到JTable中  
  22.         MyTableModel myModel = new MyTableModel();  
  23.         JTable table = new JTable(myModel);  
  24.         table.setPreferredScrollableViewportSize(new Dimension(50070));  
  25.   
  26.         //将表格添加到可滚动的面板  
  27.         JScrollPane scrollPane = new JScrollPane(table);  
  28.   
  29.         //将滚动面板添加到窗体  
  30.         getContentPane().add(scrollPane, BorderLayout.CENTER);  
  31.         //添加监听  
  32.         addWindowListener(new WindowAdapter() {  
  33.             public void windowClosing(WindowEvent e) {  
  34.                 System.exit(0);  
  35.             }  
  36.         });  
  37.     }  
  38. /** 
  39.  * Title: 定义自己的表格模式 
  40.  * Description: 通过继承AbstractTableModel类来定义自己的表格模式, 
  41.  *    这里使得第三个以后才可以编辑 
  42.  */  
  43.     class MyTableModel extends AbstractTableModel {  
  44.       
  45.     private static final long serialVersionUID = 1L;  
  46.         //定义表头  
  47.         final String[] columnNames = {"姓名",   
  48.                                       "性别",  
  49.                                       "学历",  
  50.                                       "年龄",  
  51.                                       "是否已婚"};  
  52.         //初始化表数据  
  53.         final Object[][] data = {  
  54.             {"张三""男",   
  55.              "大本"new Integer(25), new Boolean(false)},  
  56.             {"李四""男",   
  57.              "大本"new Integer(33), new Boolean(true)},  
  58.             {"王五""男",  
  59.              "高中"new Integer(20), new Boolean(false)},  
  60.             {"赵倩""女",  
  61.              "大专"new Integer(26), new Boolean(true)},  
  62.             {"周大""男",  
  63.              "大本"new Integer(24), new Boolean(false)}  
  64.         };  
  65. /** 
  66.  *方法说明:继承AbstractTableModel必须实现的方法 
  67.  *输入参数: 
  68.  *返回类型:int 列数 
  69.  */  
  70.         public int getColumnCount() {  
  71.             return columnNames.length;  
  72.         }  
  73. /** 
  74.  *方法说明:继承AbstractTableModel必须实现的方法 
  75.  *输入参数: 
  76.  *返回类型:int 列数 
  77.  */          
  78.         public int getRowCount() {  
  79.             return data.length;  
  80.         }  
  81. /** 
  82.  *方法说明:继承AbstractTableModel必须实现的方法 
  83.  *输入参数: 
  84.  *返回类型:String 列名 
  85.  */  
  86.         public String getColumnName(int col) {  
  87.             return columnNames[col];  
  88.         }  
  89. /** 
  90.  *方法说明:继承AbstractTableModel必须实现的方法,获取表格中的数据 
  91.  *输入参数:int row 行数 
  92.  *输入参数:int col 列数 
  93.  *返回类型:Object 数据对象 
  94.  */  
  95.         public Object getValueAt(int row, int col) {  
  96.             return data[row][col];  
  97.         }  
  98. /** 
  99.  *方法说明:实现这个方法使得最后一列不是显示true和false。而是使用检查盒 
  100.  *输入参数: 
  101.  *返回类型: 
  102.  */  
  103.         @SuppressWarnings("unchecked")  
  104.         public Class getColumnClass(int c) {  
  105.             return getValueAt(0, c).getClass();  
  106.         }  
  107. /** 
  108.  *方法说明:这个方法不一定需要实现。这里是为了定义可编辑的列 
  109.  *输入参数: 
  110.  *返回类型:boolean 是否可编辑 
  111.  */  
  112.         public boolean isCellEditable(int row, int col) {  
  113.             if (col < 2) {   
  114.                 return false;  
  115.             } else {  
  116.                 return true;  
  117.             }  
  118.         }  
  119. /** 
  120.  *方法说明:实现此方法,获得编辑数据。 
  121.  *输入参数: 
  122.  *返回类型: 
  123.  */  
  124.         public void setValueAt(Object value, int row, int col) {  
  125.                 System.out.println("修改数据位置: " + row + "," + col  
  126.                                    + " 新数据为: " + value);  
  127.   
  128.             data[row][col] = value;  
  129.             fireTableCellUpdated(row, col);  
  130.   
  131.                 System.out.println("表格新数据:");  
  132.                 printDebugData();  
  133.   
  134.         }  
  135. /** 
  136.  *方法说明:输出表格中的新数据 
  137.  *输入参数: 
  138.  *返回类型: 
  139.  */  
  140.         private void printDebugData() {  
  141.             int numRows = getRowCount();  
  142.             int numCols = getColumnCount();  
  143.   
  144.             for (int i=0; i < numRows; i++) {  
  145.                 System.out.print("    行 " + i + ":");  
  146.                 for (int j=0; j < numCols; j++) {  
  147.                     System.out.print("  " + data[i][j]);  
  148.                 }  
  149.                 System.out.println();  
  150.             }  
  151.             System.out.println("--------------------------");  
  152.         }  
  153.     }  
  154. /** 
  155.  *方法说明:主方法 
  156.  *输入参数: 
  157.  *返回类型: 
  158.  */  
  159.     public static void main(String[] args) {  
  160.         JFrame.setDefaultLookAndFeelDecorated(true);  
  161.         MyTableDemo frame = new MyTableDemo();  
  162.         frame.pack();  
  163.         frame.setVisible(true);  
  164.     }  
  165. }  

view plainprint?
  1. package test26;  
  2.   
  3. import java.awt.*;   
  4. import javax.swing.*;  
  5. /** 
  6.  * Title: 基本图形的绘制 
  7.  * Description: 本实例演示绘制四边型、圆角矩形、椭圆等基本的图形。  
  8.  * Filename: Sample.java 
  9.  */  
  10. public class Sample extends JFrame {   
  11.   
  12.     private static final long serialVersionUID = 1L;  
  13. /** 
  14.  *方法说明:主方法 
  15.  *输入参数: 
  16.  *返回类型: 
  17.  */    
  18.   public static void main(String[] args){  
  19.     Sample sl = new Sample();  
  20.     sl.update();  
  21.   }  
  22. /** 
  23.  *方法说明:构造器,显示窗体 
  24.  *输入参数: 
  25.  *返回类型: 
  26.  */    
  27.   @SuppressWarnings("deprecation")  
  28. Sample(){  
  29.     super("Sample");  
  30.     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);  
  31.     setSize(310,160);  
  32.     show();  
  33.   }  
  34. /** 
  35.  *方法说明:更新画面 
  36.  *输入参数: 
  37.  *返回类型: 
  38.  */    
  39.   public void update(){  
  40.     repaint();  
  41.   }  
  42. /** 
  43.  *方法说明:绘制画面 
  44.  *输入参数: 
  45.  *返回类型: 
  46.  */    
  47.   public void paint(Graphics g) {   
  48.      int [] x={10,30,80,50,10};  
  49.      int [] y={90,140,120,100,90};  
  50.      g.setColor(Color.cyan);        
  51.      //绘制竖格线  
  52.      for (int i=0; i<=300; i+=10) {   
  53.         g.drawLine(i,0,i,150);      
  54.      }  
  55.      //绘制横格线   
  56.      for (int i=0; i<=150; i+=10) {   
  57.         g.drawLine(0,i,300,i);      
  58.      }  
  59.      g.setColor(Color.black);       
  60.      //有角矩形,起始点(10,30),宽80,高50  
  61.      g.drawRect(10,30,80,50);       
  62.      //圆角矩形,起始点(110,30),宽80,高50,角(a=20,b=10)  
  63.      g.drawRoundRect(110,30,80,50,20,10);  
  64.      //多角边  
  65.      g.drawPolygon(x,y,5);  
  66.      //椭圆,圆心(110,90)、a=80,b=50         
  67.      g.drawOval(110,90,80,50);   
  68.      //一条弧,圆心(219,30)、a=80,b=50 角度在0-90之间  
  69.      g.drawArc(210,30,80,50,0,90);  
  70.      //扇面,圆心(219,90)、a=80,b=50 角度在0-90之间  
  71.      g.fillArc(210,90,80,50,0,90);  
  72.   }  
  73. }   

view plainprint?
  1. package test27;  
  2.   
  3.  import java.awt.*;  
  4. import javax.swing.*;   
  5.    
  6.  public class Func extends JFrame{   
  7.   
  8.     private static final long serialVersionUID = 1L;  
  9. /** 
  10.  *方法说明:主方法 
  11.  *输入参数: 
  12.  *返回类型: 
  13.  */  
  14.   public static void main(String[] args){  
  15.     Func db = new Func();  
  16.     db.update();  
  17.   }  
  18. /** 
  19.  *方法说明:构造器,显示窗体 
  20.  *输入参数: 
  21.  *返回类型: 
  22.  */   
  23.   @SuppressWarnings("deprecation")  
  24. Func(){  
  25.     super("Function");  
  26.     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);  
  27.     setSize(310,310);  
  28.     show();  
  29.   }  
  30. /** 
  31.  *方法说明:更新画面 
  32.  *输入参数: 
  33.  *返回类型: 
  34.  */   
  35.   public void update(){  
  36.      repaint();  
  37.   }  
  38. /** 
  39.  *方法说明:转换坐标点 
  40.  *输入参数: 
  41.  *返回类型: 
  42.  */  
  43.   double f(double x) {    
  44.        return (Math.sin(2*x)+Math.cos(3*x));   
  45.   }  
  46. /** 
  47.  *方法说明:绘制坐标图 
  48.  *输入参数: 
  49.  *返回类型: 
  50.  */    
  51.   public void paint(Graphics g) {   
  52.        double x0,x1,y0,y1,xd,yd;   
  53.        double max=5.0;   
  54.        int w,h,hw,hh;   
  55.        //获取屏幕的尺寸  
  56.        w=getSize().width;   
  57.        h=getSize().height;  
  58.        hw=w/2; hh=h/2;  
  59.        //在屏幕上输出字符  
  60.        g.drawString("Sin[2x]+Cos[3x]",10,40);  
  61.        g.setColor(Color.red);    
  62.        g.drawString("0",hw+5,hh+12);   
  63.        g.drawString(""+max,hw-20,40);  
  64.        g.drawString(""+max,w-20,hh+12);  
  65.        //绘制X轴坐标  
  66.        g.drawLine(0,hh,w,hh);  
  67.        //绘制Y轴坐标  
  68.        g.drawLine(hw,0,hw,h);  
  69.        xd=2*max/w;//计算X增量  
  70.        yd=hh/max; //计算y增量  
  71.        g.setColor(Color.blue);  
  72.        //使用增量绘制一小段线,最终组成曲线图形。   
  73.        for (int x=0 ; x<w-1; x++) {   
  74.           x0=-max+x*xd; y0=f(x0)*yd;   
  75.           x1=x0+xd;     y1=f(x1)*yd;   
  76.           g.drawLine(x,(int)(hh-y0),x+1,(int)(hh-y1));  
  77.        }   
  78.   }  
  79.  } //end  

view plainprint?
  1. package test28;  
  2.   
  3. import javax.swing.*;  
  4. import java.awt.*;  
  5. /** 
  6.  * Title: 图片的处理, 
  7.  * Description: 将图片放大和翻转显示 
  8.  * Filename: ImgDemo.java 
  9.  */  
  10. class ImgDemo extends JFrame {  
  11.   
  12.     private static final long serialVersionUID = 1L;  
  13. Image image;  
  14. /** 
  15.  *方法说明:构造器,显示窗体 
  16.  *输入参数: 
  17.  *返回类型: 
  18.  */  
  19. @SuppressWarnings("deprecation")  
  20. ImgDemo(String filename) {  
  21. setTitle("drawImage Example");  
  22. try {  
  23.   image = getToolkit().getImage(filename);  
  24.   setIconImage(image);  
  25. catch (Exception e) {  
  26.   e.printStackTrace();  
  27. }  
  28.   
  29. setSize(600250);  
  30. setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);  
  31. show();  
  32. }  
  33. /** 
  34.  *方法说明:绘制图像 
  35.  *输入参数: 
  36.  *返回类型: 
  37.  */  
  38. public void paint(Graphics g) {  
  39.   Insets insets = getInsets();  
  40.   int x = insets.left, y = insets.top;  
  41.   //获取图片尺寸  
  42.   int w = image.getWidth(this);  
  43.   int h = image.getHeight(this);  
  44.   //正常显示图片  
  45.   g.drawImage(image, x, y, this);   
  46.   //缩小图形  
  47.   g.drawRect(x, y, w/4+1, h/4+1);//画一个框  
  48.   g.drawImage(image, x+1, y+1, w/4, h/4this);  
  49.   //水平翻转  
  50.   g.drawImage(image, x+w, y, x+2*w, y+h, w, 00, h, this);  
  51. }  
  52. /** 
  53.  *方法说明:主方法,接受参数 
  54.  *输入参数: 
  55.  *返回类型: 
  56.  */  
  57. public static void main(String[] args) {  
  58.  if (args.length == 1) {  
  59.   new ImgDemo(args[0]);  
  60.  } else {  
  61.   System.err.println("usage: java ImgDemo images-name ");  
  62.  }  
  63. }  
  64. }  

view plainprint?
  1. package test29;  
  2.   
  3.  import java.awt.*;   
  4.  import java.awt.event.*;  
  5.  import java.util.*;  
  6.  import javax.swing.*;  
  7. import javax.swing.Timer;  
  8. /** 
  9.  * Title: 时钟 
  10.  * Description: 本实例演示使用图形绘制一个图形时钟 
  11.  * Filename: Clock.java 
  12.  */  
  13.  public class Clock extends JFrame implements ActionListener{   
  14.   
  15.     private static final long serialVersionUID = 1L;  
  16.     Timer timer;  
  17.     int x,y,old_X,old_Y, r,x0,y0,w,h,ang;   
  18.     int sdo,mdo,hdo,old_M,old_H;   
  19.     TimeZone tz =TimeZone.getTimeZone("JST");  
  20.     final double RAD=Math.PI/180.0;   
  21.   
  22.   public static void main(String[] args){  
  23.     @SuppressWarnings("unused")  
  24.     Clock cl = new Clock();  
  25.   }  
  26. /** 
  27.  *方法说明:实现ActionListener类必须过载的方法 
  28.  *输入参数: 
  29.  *返回类型: 
  30.  */   
  31.   public void actionPerformed(ActionEvent e) {  
  32.             timer.restart();  
  33.     }  
  34. /** 
  35.  *方法说明:构造器,显示窗体,并添加了一个秒表 
  36.  *输入参数: 
  37.  *返回类型: 
  38.  */   
  39.   @SuppressWarnings("deprecation")  
  40. Clock(){  
  41.     super("Clock");  
  42.     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);  
  43.     setBackground(new Color(0,0,192));  
  44.     setSize(300,300);  
  45.     show();  
  46.     int delay = 1000;  
  47.     //窗体添加事件监听,监听秒表的触发  
  48.     ActionListener taskPerformer = new ActionListener() {  
  49.       public void actionPerformed(ActionEvent evt) {  
  50.          repaint();  
  51.       }  
  52.     };  
  53.     new Timer(delay, taskPerformer).start();  
  54.   }  
  55. /** 
  56.  *方法说明:绘制图形 
  57.  *输入参数: 
  58.  *返回类型: 
  59.  */  
  60.   public void paint( Graphics g ) {   
  61.      Insets insets = getInsets();  
  62.      int L0 = (insets.left)/2, T0 = (insets.top)/2;  
  63.      int hh,mm,ss;   
  64.      String st;   
  65.      h=getSize().height;  
  66.      //绘制圆形  
  67.      g.setColor(Color.white);   
  68.      g.drawOval(L0+30,T0+30,h-60,h-60);  
  69.      g.drawOval(L0+32,T0+32,h-64,h-64);  
  70.      r=h/2-30;  
  71.      x0=30+r-5+L0;  
  72.      y0=30+r-5-T0;  
  73.      ang=60;  
  74.      for (int i=1; i<=12; i++) {   
  75.         x=(int)((r+10)*Math.cos(RAD*ang)+x0);  
  76.         y=(int)((r+10)*Math.sin(RAD*ang)+y0);  
  77.         g.drawString(""+i,x,h-y);  
  78.         ang-=30;  
  79.      }   
  80.      x0=30+r+L0; y0=30+r+T0;  
  81.      //获取时间  
  82.      Calendar now=Calendar.getInstance();  
  83.      hh=now.get(Calendar.HOUR_OF_DAY);//小时  
  84.      mm=now.get(Calendar.MINUTE);//分钟  
  85.      ss=now.get(Calendar.SECOND);// 秒  
  86.      g.setColor(Color.pink);   
  87.      g.fillRect(L0,T0,60,28);//填充的矩形  
  88.      g.setColor(Color.blue);   
  89.      if (hh < 10) st="0"+hh;     else st=""+hh;   
  90.      if (mm < 10) st=st+":0"+mm; else st=st+":"+mm;   
  91.      if (ss < 10) st=st+":0"+ss; else st=st+":"+ss;   
  92.      g.drawString(st,L0,T0+25);  
  93.      //计算时间和图形的关系  
  94.      sdo=90-ss*6;  
  95.      mdo=90-mm*6;  
  96.      hdo=90-hh*30-mm/2;  
  97.      //擦除秒针  
  98.      if (old_X > 0) {  
  99.         g.setColor(getBackground());  
  100.         g.drawLine(x0,y0,old_X,(h-old_Y));  
  101.      } else {   
  102.         old_M=mdo;  
  103.         old_H=hdo;  
  104.      }   
  105.      //绘制秒针  
  106.      g.setColor(Color.yellow);   
  107.      x=(int)((r-8)*Math.cos(RAD*sdo)+x0);   
  108.      y=(int)((r-8)*Math.sin(RAD*sdo)+y0)-2*T0;   
  109.      g.drawLine(x0,y0,x,(h-y));  
  110.        
  111.      old_X=x;   
  112.      old_Y=y;   
  113.      //擦除分针和时针  
  114.      if (mdo != old_M) {  
  115.        line(g,old_M,(int)(r*0.7),getBackground());  
  116.        old_M=mdo;  
  117.      }   
  118.      if (hdo != old_H) {  
  119.        line(g,old_H,(int)(r*0.5),getBackground());  
  120.        old_H=hdo;  
  121.      }   
  122.      //绘制分针  
  123.      line(g,mdo,(int)(r*0.7),Color.green);  
  124.      //绘制时针  
  125.      line(g,hdo,(int)(r*0.5),Color.red);  
  126.   } // end paint   
  127. /** 
  128.  *方法说明:绘制线,用于绘制时针和分针 
  129.  *输入参数: 
  130.  *返回类型: 
  131.  */  
  132.    public void line(Graphics g, int t, int n, Color c) {   
  133.       int [] xp = new int[4];  
  134.       int [] yp = new int[4];   
  135.       xp[0]=x0;  
  136.       yp[0]=y0;  
  137.       xp[1]=  (int)((n-10)*Math.cos(RAD*(t-4))+x0);   
  138.       yp[1]=h-(int)((n-10)*Math.sin(RAD*(t-4))+y0);   
  139.       xp[2]=  (int)( n    *Math.cos(RAD* t   )+x0);   
  140.       yp[2]=h-(int)( n    *Math.sin(RAD* t   )+y0);   
  141.       xp[3]=  (int)((n-10)*Math.cos(RAD*(t+4))+x0);   
  142.       yp[3]=h-(int)((n-10)*Math.sin(RAD*(t+4))+y0);   
  143.       g.setColor(c);   
  144.       g.fillPolygon(xp,yp,4);  
  145.    }  
  146.  }  

view plainprint?
  1. package test30;  
  2.   
  3.   
  4.  import java.awt.*;   
  5.  import java.awt.event.*;   
  6.  import javax.swing.*;  
  7.  /** 
  8.  * Title: 正方体框图 
  9.  * Description: 绘制一个边框的正方体,获取鼠标事件根据鼠标的位置旋转方体。 
  10.  * Filename: Gr3d1m.java 
  11.  */  
  12.  public class Gr3d1m extends JFrame   
  13.      implements MouseListener,MouseMotionListener {   
  14.      int doX,doY;  
  15.      int angX=30,angY=30;  
  16.      Cube data = new Cube();  
  17.      Color [] Col={Color.gray,Color.cyan,Color.green,   
  18.                    Color.red,Color.white,Color.orange,   
  19.                    Color.magenta,Color.pink};   
  20. /** 
  21.  *方法说明:主方法 
  22.  *输入参数: 
  23.  *返回类型: 
  24.  */  
  25.   public static void main(String[] args){  
  26.      Gr3d1m G3 = new Gr3d1m();  
  27.   }  
  28. /** 
  29.  *方法说明:构造器 
  30.  *输入参数: 
  31.  *返回类型: 
  32.  */  
  33.   public  Gr3d1m() {  
  34.      setTitle("3D cube Frame");  
  35.      setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);  
  36.      addMouseListener(this);  
  37.      addMouseMotionListener(this);  
  38.      setBackground(new Color(128,128,255));  
  39.      setSize(350,350);  
  40.      show();  
  41.   }  
  42. /** 
  43.  *方法说明:鼠标按下事件,获取鼠标位置 
  44.  *输入参数: 
  45.  *返回类型: 
  46.  */  
  47.   public void mousePressed(MouseEvent e) {  
  48.      doX=e.getX();  
  49.      doY=e.getY();  
  50.   }  
  51. /** 
  52.  *方法说明:鼠标托拽事件,改变鼠标位置,重画屏幕 
  53.  *输入参数: 
  54.  *返回类型: 
  55.  */    
  56.   public void mouseDragged(MouseEvent e)  {  
  57.      angX=angX+e.getY()-doY;   
  58.      angY=angY+e.getX()-doX;  
  59.      doX=e.getX(); doY=e.getY();  
  60.      repaint();   
  61.   }  
  62. /* 以下是实现MouseListener和MouseMotionListener必须重载的方法*/  
  63.   public void mouseReleased(MouseEvent e) { }  
  64.   public void mouseClicked(MouseEvent e)  { }  
  65.   public void mouseEntered(MouseEvent e)  { }  
  66.   public void mouseExited(MouseEvent e)   { }  
  67.   public void mouseMoved(MouseEvent e)    { }   
  68. /** 
  69.  *方法说明:绘制图形 
  70.  *输入参数: 
  71.  *返回类型: 
  72.  */  
  73.   public void paint( Graphics g ) {  
  74.      delDeaw(g);  
  75.      for (int i=0; i<data.x.length; i++) {   
  76.         drawPG(g, data.x[i], data.y[i], data.z[i],   
  77.                150,150,Col[i]);   
  78.      }   
  79.      g.setColor(Color.yellow);   
  80.      g.drawString("X="+angX%360+" Y="+angY%360,   
  81.                   10,getSize().height-30);   
  82.   }  
  83. /** 
  84.  *方法说明:擦拭屏幕,使用背景色覆盖原来的图形 
  85.  *输入参数: 
  86.  *返回类型: 
  87.  */  
  88.   public void delDeaw(Graphics g){  
  89.      Insets insets = getInsets();  
  90.      int L0 = insets.left, T0 = insets.top;  
  91.     g.setColor(new Color(128,128,255));   
  92.     g.fillRect(L0,T0,L0+350,T0+350);  
  93.   }  
  94. /** 
  95.  *方法说明:绘制方体 
  96.  *输入参数: 
  97.  *返回类型: 
  98.  */  
  99.   public void drawPG(Graphics g,double []x,double []y,   
  100.                      double []z,int xp,int yp,Color co) {   
  101.      double x1,y1,z0;   
  102.      int len=x.length;   
  103.      int [] xx=new int [len];   
  104.      int [] yy=new int [len];   
  105.      final double RAD=Math.PI/180.0;  
  106.      double a=angX*RAD;  
  107.      double b=angY*RAD;   
  108.      double sinA=Math.sin(a),sinB=Math.sin(b);  
  109.      double cosA=Math.cos(a),cosB=Math.cos(b);  
  110.      for (int i=0; i<len; i++) {   
  111.         x1= x[i]*cosB+z[i]*sinB;  
  112.         z0=-x[i]*sinB+z[i]*cosB;   
  113.         y1= y[i]*cosA-  z0*sinA;  
  114.         xx[i]=xp+(int)Math.rint(x1);   
  115.         yy[i]=yp-(int)Math.rint(y1);   
  116.      }   
  117.      g.setColor(co);   
  118.      g.drawPolygon(xx,yy,len);//绘制多边形  
  119.   }  
  120.  } 

原创粉丝点击