zoukankan      html  css  js  c++  java
  • 16.6

    习题标准答案:

     1 import java.awt.*;
     2 import java.awt.event.*;
     3 import javax.swing.*;
     4 
     5 public class Exercise16_6 extends JFrame {
     6   private DisplayPanel panel = new DisplayPanel();
     7 
     8   public Exercise16_6() {
     9     add(panel, BorderLayout.CENTER);
    10     panel.setFocusable(true);
    11   }
    12 
    13   /** Main method */
    14   public static void main(String[] args) {
    15     JFrame frame = new Exercise16_6();
    16     frame.setTitle("Exercise16_6");
    17     frame.setSize(300, 300);
    18     frame.setLocationRelativeTo(null); // Center the frame
    19     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    20     frame.setVisible(true);
    21   }
    22 
    23   class DisplayPanel extends MessagePanel {
    24     private String m1 = "Java is fun";
    25     private String m2 = "Java is powerful";
    26     private boolean isM1;
    27 
    28     public DisplayPanel() {
    29       setCentered(true);
    30       this.addMouseListener(new MouseAdapter() {
    31         public void mouseClicked(MouseEvent e) {
    32           if (isM1) setMessage(m1);
    33           else setMessage(m2);
    34 
    35           isM1 = !isM1;
    36         }
    37       });
    38     }
    39   }
    40 }
    Exercise16_6.java

    我的答案:

     1 import java.awt.*;
     2 import java.awt.event.*;
     3 import javax.swing.*;
     4 
     5 public class Test_16_6 extends JFrame {
     6     MessagePanel mPanel = new MessagePanel();
     7     
     8   public Test_16_6() {      
     9       add(mPanel);
    10       mPanel.addMouseListener(new mouseListener());
    11   }
    12 
    13   /** Main method */
    14   public static void main(String[] args) {
    15     JFrame frame = new Test_16_6();
    16     frame.setTitle("Exercise16_6");
    17     frame.setSize(300, 300);
    18     frame.setLocationRelativeTo(null); // Center the frame
    19     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    20     frame.setVisible(true);
    21   } 
    22   
    23   class mouseListener implements MouseListener{
    24       boolean clicked = false;
    25     @Override
    26     public void mouseClicked(MouseEvent e) {
    27         // TODO Auto-generated method stub
    28         if(clicked == false)
    29             { mPanel.setMessage("Java is fun"); clicked = true; }
    30             else if(clicked == true)
    31             { mPanel.setMessage("Java is powerful"); clicked = false;}
    32         }
    33     @Override
    34     public void mouseEntered(MouseEvent e) {
    35         // TODO Auto-generated method stub
    36         
    37     }
    38     @Override
    39     public void mouseExited(MouseEvent e) {
    40         // TODO Auto-generated method stub
    41         
    42     }
    43     @Override
    44     public void mousePressed(MouseEvent e) {
    45         // TODO Auto-generated method stub
    46         
    47     }
    48     @Override
    49     public void mouseReleased(MouseEvent e) {
    50         // TODO Auto-generated method stub
    51         
    52     }      
    53   }
    54 }
    Test_16_6.java

    需要用到的类:

      1 // MessagePanel.java: Display a message on a JPanel
      2 import java.awt.Font;
      3 import java.awt.FontMetrics;
      4 import java.awt.Dimension;
      5 import java.awt.Graphics;
      6 import javax.swing.JPanel;
      7 
      8 public class MessagePanel extends JPanel {
      9   /** The message to be displayed */
     10   private String message = "Welcome to Java";
     11 
     12   /** The x coordinate where the message is displayed */
     13   private int xCoordinate = 20;
     14 
     15   /** The y coordinate where the message is displayed */
     16   private int yCoordinate = 20;
     17 
     18   /** Indicate whether the message is displayed in the center */
     19   private boolean centered;
     20 
     21   /** The interval for moving the message horizontally and vertically */
     22   private int interval = 10;
     23 
     24   /** Default constructor */
     25   public MessagePanel() {
     26   }
     27 
     28   /** Constructor with a message parameter */
     29   public MessagePanel(String message) {
     30     this.message = message;
     31   }
     32 
     33   /** Return message */
     34   public String getMessage() {
     35     return message;
     36   }
     37 
     38   /** Set a new message */
     39   public void setMessage(String message) {
     40     this.message = message;
     41     repaint();
     42   }
     43 
     44   /** Return xCoordinator */
     45   public int getXCoordinate() {
     46     return xCoordinate;
     47   }
     48 
     49   /** Set a new xCoordinator */
     50   public void setXCoordinate(int x) {
     51     this.xCoordinate = x;
     52     repaint();
     53   }
     54 
     55   /** Return yCoordinator */
     56   public int getYCoordinate() {
     57     return yCoordinate;
     58   }
     59 
     60   /** Set a new yCoordinator */
     61   public void setYCoordinate(int y) {
     62     this.yCoordinate = y;
     63     repaint();
     64   }
     65 
     66   /** Return centered */
     67   public boolean isCentered() {
     68     return centered;
     69   }
     70 
     71   /** Set a new centered */
     72   public void setCentered(boolean centered) {
     73     this.centered = centered;
     74     repaint();
     75   }
     76 
     77   /** Return interval */
     78   public int getInterval() {
     79     return interval;
     80   }
     81 
     82   /** Set a new interval */
     83   public void setInterval(int interval) {
     84     this.interval = interval;
     85     repaint();
     86   }
     87 
     88   /** Paint the message */
     89   protected void paintComponent(Graphics g) {
     90     super.paintComponent(g);
     91 
     92     if (centered) {
     93       // Get font metrics for the current font
     94       FontMetrics fm = g.getFontMetrics();
     95 
     96       // Find the center location to display
     97       int stringWidth = fm.stringWidth(message);
     98       int stringAscent = fm.getAscent();
     99       // Get the position of the leftmost character in the baseline
    100       xCoordinate = getWidth() / 2 - stringWidth / 2;
    101       yCoordinate = getHeight() / 2 + stringAscent / 2;
    102     }
    103 
    104     g.drawString(message, xCoordinate, yCoordinate);
    105   }
    106 
    107   /** Move the message left */
    108   public void moveLeft() {
    109     xCoordinate -= interval;
    110     repaint();
    111   }
    112 
    113   /** Move the message right */
    114   public void moveRight() {
    115     xCoordinate += interval;
    116     repaint();
    117   }
    118 
    119   /** Move the message up */
    120   public void moveUp() {
    121     yCoordinate -= interval;
    122     repaint();
    123   }
    124 
    125   /** Move the message down */
    126   public void moveDown() {
    127     yCoordinate -= interval;
    128     repaint();
    129   }
    130 
    131   /** Override get method for preferredSize */
    132   public Dimension getPreferredSize() {
    133     return new Dimension(200, 30);
    134   }
    135 }
    MessagePanel.java

    效果图:

  • 相关阅读:
    使用FolderBrowserDialog组件选择文件夹
    使用OpenFileDialog组件打开多个文
    使用OpenFileDialog组件打开对话框
    获取弹出对话框的相关返回值
    PAT 甲级 1139 First Contact (30 分)
    PAT 甲级 1139 First Contact (30 分)
    PAT 甲级 1138 Postorder Traversal (25 分)
    PAT 甲级 1138 Postorder Traversal (25 分)
    PAT 甲级 1137 Final Grading (25 分)
    PAT 甲级 1137 Final Grading (25 分)
  • 原文地址:https://www.cnblogs.com/wanjiang/p/5636450.html
Copyright © 2011-2022 走看看