国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

實現類似XP風格的快速按鈕

2019-11-18 13:23:49
字體:
來源:轉載
供稿:網友


  實現功能: 類似于Windows xp中的快速按鈕的風格, 答應指定按鈕的狀態是自彈起(就是鼠標鍵按下時按鈕產生被按下的效果, 鼠標鍵抬起的時候按鈕自動回復原狀)著是開關按鈕(點擊一次, 按鈕被按下, 再點擊一次, 按鈕被彈起), 并能夠設定一組(多個)或多組互斥按鈕(即同組中有且只有一個按鈕一直處于被按下的狀態). 當然, 這個類不是很完善, 有許多地方可以改進, 比如沒有加入當按鈕處于禁止使用的狀態(Disabled), 應該再引入一個Image來顯示成灰色的效果等. 您就自己改改吧. :)
  程序代碼:
  SpeedButton.java
  --------------------------------
  import javax.swing.*;
  import java.awt.*;
  import java.awt.event.*;
  
  public class SpeedButton extends JButton implements MouseListener {
  PRivate boolean entered = false; /* 標志, 用于判定鼠標是否在按鈕上 */
  private boolean downed = false; /* 標志, 用于按鈕是否被按下 */
  
  private boolean enabledDowned = false; /* 標志, 用于按鈕是否答應被按下 */
  
  private Image image = null;
  private int groupID = 0; /* 指定按鈕屬于哪個互斥組, 取值為0時不判定 */
  
  private int buttonID; /* 按鈕本身的ID號, 唯一 */
  
  /**
  * 這個構造器有點煩, 這里可以進行優化成多個構造器來組合.
  * @see com.javax.swing.JButton
  * @author delfan,2002.07.23
  * @version 1.0
  */
  public SpeedButton(int buttonID, Image image, int width, int height, String tip, boolean enabledDowned,boolean initmode, int groupID, ActionListener actionListener) {
  this.buttonID = buttonID;
  this.image = image;
  addMouseListener(this);
  setPreferredSize(new Dimension(width, height));
  setToolTipText(tip);
  this.enabledDowned = enabledDowned;
  this.groupID = groupID;
  downed = initmode;
  addActionListener(actionListener);
  }
  
  public void paint(Graphics g) {
  if (getSize().height == 2 getSize().width == 2) { // 畫分隔條, 當按鈕寬度或高度為2的時候,
  g.setColor(new Color(119, 133, 168)); // 認為是分隔條
  g.fillRect(0, 0, getWidth() - 1, getHeight() - 1);
  g.setColor(new Color(129, 143, 178));
  g.fillRect(1, 1, getWidth(), getHeight());
  setEnabled(false);
  }
  else
  {
  if (entered) { // 鼠標在按鈕內
  g.setColor(new Color(119, 133, 168));
  g.fillRect(0, 0, getWidth(), getHeight());
  g.setColor(new Color(8, 36, 107));
  g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
  if (image != null) g.drawImage(image, 2, 2, getParent());
  } else { // 鼠標不在按鈕內
  g.setColor(getParent().getBackground());
  g.fillRect(0, 0, getWidth(), getHeight());
  if (image != null) g.drawImage(image, 2, 2, getParent());
  }
  
  if (downed) { // 按鈕被按下
  g.setColor(new Color(181, 190, 214));
  g.fillRect(0, 0, getWidth(), getHeight());
  g.setColor(new Color(8, 36, 107));
  g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
  if (image != null) g.drawImage(image, 3, 3, getParent());
  }
  }
  }
  
  public void update(Graphics g) {paint(g);}
  
  /**
  * 按鈕是否處于按下狀態
  */
  public boolean isDowned() {return downed;}
  
  /**
  * 取得按鈕的組索引號
  */
  public int getGroupID() {return groupID;}
  
  public void setDowned(boolean downed) {this.downed = downed;repaint();}
  
  public void mouseEntered(MouseEvent e) {entered = true;repaint();}
  
  public void mouseExited(MouseEvent e) {entered = false;repaint();}
  
  public void mouseClicked(MouseEvent e) {}
  
  public void mousePressed(MouseEvent e) {
  if (enabledDowned && downed && groupID == 0)
  downed = false;
  else
  downed = true;
  repaint();
  }
  
  public void mouseReleased(MouseEvent e) {
  if (!enabledDowned) downed = false;
  repaint();
  if (groupID != 0) // 通過存放按鈕的容器進行互斥按鈕的狀態改變操作
  for (int i = 0; i < getParent().getComponentCount(); i++)
  if (getParent().getComponent(i) instanceof SpeedButton) {
  if (((SpeedButton) getParent().getComponent(i)).getGroupID() == groupID
  && ((SpeedButton) getParent().getComponent(i)) != this)
  ((SpeedButton) getParent().getComponent(i)).setDowned(false);
  }
  }
  
  public int getButtonID() {return buttonID;}
  
  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鸡泽县| 宽城| 和田市| 昂仁县| 女性| 庆城县| 沧州市| 大安市| 西盟| 称多县| 肃南| 平遥县| 河源市| 太仆寺旗| 吉木乃县| 杭州市| 鄂托克前旗| 东兴市| 鱼台县| 巫溪县| 方城县| 中山市| 谢通门县| 呈贡县| 平湖市| 枣阳市| 西安市| 顺平县| 万安县| 边坝县| 富蕴县| 昌江| 甘泉县| 利津县| 常山县| 天津市| 宜章县| 视频| 安丘市| 新野县| 辉县市|