zoukankan      html  css  js  c++  java
  • graphics

    摘自:
        http://www.ntu.edu.sg/home/ehchua/programming/java/J4b_CustomGraphics.html
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    /**
     * Custom Graphics Example: Using key/button to move a line left or right.
     */
    @SuppressWarnings("serial")
    public class CGMoveALine extends JFrame {
       // Name-constants for the various dimensions
       public static final int CANVAS_WIDTH = 400;
       public static final int CANVAS_HEIGHT = 140;
       public static final Color LINE_COLOR = Color.BLACK;
       public static final Color CANVAS_BACKGROUND = Color.CYAN;
     
       // The line from (x1, y1) to (x2, y2), initially position at the center
       private int x1 = CANVAS_WIDTH / 2;
       private int y1 = CANVAS_HEIGHT / 8;
       private int x2 = x1;
       private int y2 = CANVAS_HEIGHT / 8 * 7;
     
       private DrawCanvas canvas; // the custom drawing canvas (extends JPanel)
     
       /** Constructor to set up the GUI */
       public CGMoveALine() {
          // Set up a panel for the buttons
          JPanel btnPanel = new JPanel(new FlowLayout());
          JButton btnLeft = new JButton("Move Left ");
          btnPanel.add(btnLeft);
          btnLeft.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
                x1 -= 10;
                x2 -= 10;
                canvas.repaint();
                requestFocus(); // change the focus to JFrame to receive KeyEvent
             }
          });
          JButton btnRight = new JButton("Move Right");
          btnPanel.add(btnRight);
          btnRight.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
                x1 += 10;
                x2 += 10;
                canvas.repaint();
                requestFocus(); // change the focus to JFrame to receive KeyEvent
             }
          });
     
          // Set up a custom drawing JPanel
          canvas = new DrawCanvas();
          canvas.setPreferredSize(new Dimension(CANVAS_WIDTH, CANVAS_HEIGHT));
     
          // Add both panels to this JFrame
          Container cp = getContentPane();
          cp.setLayout(new BorderLayout());
          cp.add(canvas, BorderLayout.CENTER);
          cp.add(btnPanel, BorderLayout.SOUTH);
     
          // "this" JFrame fires KeyEvent
          addKeyListener(new KeyAdapter() {
             @Override
             public void keyPressed(KeyEvent evt) {
                switch(evt.getKeyCode()) {
                   case KeyEvent.VK_LEFT:
                      x1 -= 10;
                      x2 -= 10;
                      repaint();
                      break;
                   case KeyEvent.VK_RIGHT:
                      x1 += 10;
                      x2 += 10;
                      repaint();
                      break;
                }
             }
          });
     
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Handle the CLOSE button
          setTitle("Move a Line");
          pack();           // pack all the components in the JFrame
          setVisible(true); // show it
          requestFocus();   // set the focus to JFrame to receive KeyEvent
       }
     
       /**
        * DrawCanvas (inner class) is a JPanel used for custom drawing
        */
    //调用repaint函数,间接调用paintComponent()函数
    class DrawCanvas extends JPanel { @Override public void paintComponent(Graphics g) { super.paintComponent(g); setBackground(CANVAS_BACKGROUND); g.setColor(LINE_COLOR); g.drawLine(x1, y1, x2, y2); // draw the line } } /** The entry main() method */ public static void main(String[] args) { // Run GUI codes on the Event-Dispatcher Thread for thread safety SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new CGMoveALine(); // Let the constructor do the job } }); } }

     

  • 相关阅读:
    leetcode--95. Unique Binary Search Trees II
    leetcode--96. Unique Binary Search Trees
    leetcode分类总结
    leetcode-115. Distinct Subsequences
    tcpdump安装配置及抓包分析
    dp经典案例
    tree的各种问题
    大数的阶乘算法
    由mmap引发的SIGBUS
    win10系统下如何查看端口被哪个进程占用
  • 原文地址:https://www.cnblogs.com/helloworldtoyou/p/5205087.html
Copyright © 2011-2022 走看看