製作圓形Swing按鈕(中文版) (轉)
這是一個關於製作圓形按鈕的技巧。事實上,這個技巧中的知識方便的適用於任何形狀的按鈕,但我們只作一個圓形的按鈕。當你製作一個圓形的按鈕時,需要做兩件事。第一件事是過載一個適當的繪畫方法以畫出一個圓形。第二件事是設定一些事件使得只有當你點選圓形按鈕的範圍中的時侯按鈕才會作出響應(不是包含圓形按鈕的矩形的範圍中)。
下面是一個實現了圓形按鈕的例程:
import .awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class Rounutton extends JButton {
public RoundButton(String label) {
super(label);
// 這些宣告把按鈕擴充套件為一個圓而不是一個橢圓。
Dimension size = getPreferredSize();
size.width = size.height = Math.max(size.width,
size.height);
setPreferredSize(size);
//這個使JButton不畫背景,而允許我們畫一個圓的背景。
setContentAreaFilled(false);
}
// 畫圓的背景和標籤
protected void paintComponent(Graphics g) {
if (getModel().isArmed()) {
// 你可以選一個高亮的顏色作為圓形按鈕類的屬性
g.setColor(Color.lightGray);
} else {
g.setColor(getBackground());
}
g.fillOval(0, 0, getSize().width-1,
getSize().height-1);
//這個呼叫會畫一個標籤和焦點矩形。
super.paintComponent(g);
}
// 用簡單的弧畫按鈕的邊界。
protected void paintBorder(Graphics g) {
g.setColor(getForeground());
g.drawOval(0, 0, getSize().width-1,
getSize().height-1);
}
// 偵測點選事件
Shape shape;
public boolean contains(int x, int y) {
// 如果按鈕改變大小,產生一個新的形狀。
if (shape == null ||
!shape.getBounds().equals(getBounds())) {
shape = new Ellipse2D.Float(0, 0,
getWidth(), getHeight());
}
return shape.contains(x, y);
}
// 測試
public static void main(String[] args) {
// 產生一個帶‘Jackpot’標籤的按鈕。
JButton button = new RoundButton("Jackpot");
button.setBackground(Color.green);
// 產生一個以顯示這個按鈕。
JFrame frame = new JFrame();
frame.getContentPane().setBackground(Color.yellow);
frame.getContentPane().add(button);
frame.getContentPane().setLayout(new FlowLayout());
frame.setSize(150, 150);
frame.setVisible(true);
}
}
由於我們想保留JButton的大部分功能,我們讓RoundButton類繼承了JButton類。在RoundButton的構造方法中,setContentAreaFilled()方法被呼叫。這就讓按鈕畫了一個矩形的焦點區,但不畫背景。
現在我們需要畫一個圓的背景。這是透過過載paintComponent()方法實現的。那個方法使用Graphics.fillOval()方法畫一個實心的圓。然後paintComponent()方法呼叫super.paintComponent()在這個實心圓的上面畫了一個標籤。
這個例子還過載了paintBorder()方法以在圓形按鈕的邊界上畫一個邊。如果你不想要邊框,你也可以不過載這個方法。這個方法呼叫了Graphics.drawOval()方法以在圓的邊界上畫一個細的邊框。
注意:在TM 1.2.2中,當你將滑鼠拖進或拖出按鈕的範圍時,JButton的行為有一個小。理論上,當你在圓形按鈕上點選滑鼠然後拖動滑鼠離開按鈕的邊界時,按鈕應該改變它的外形。當你拖動滑鼠進入按鈕的邊界內時,按鈕應回覆它的外形。不幸的是,包含這個行為的程式碼不能呼叫contains()方法。代替它的是隻使用按鈕的‘限制範圍’(這是包含按鈕的最小矩形範圍)注意,如果你在圓形邊界內輕微的拖動滑鼠,也就是說離開圓形的範圍但不離開邊界,按鈕將不會改變它的外形。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990937/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 按鈕製作網站收集網站
- WPF Button按鈕設定圓角
- 如何用CSS製作一個圓形放大鏡CSS
- canvas 繪製圓形Canvas
- SVG <circle> 繪製圓形SVG
- MFC 捕獲按鈕 按下和抬起 (轉)
- Android 點選按鈕跳轉Android
- jquery製作圖片瀑布流點選按鈕載入更多內容jQuery
- 異形按鈕的點選區域處理
- CSS3簡單圓角立體按鈕效果CSSS3
- UWP WinUI 製作一個路徑向量圖示按鈕樣式入門UI
- PS新手教程:如何在Photoshop中使用“漸變工具”製作質感按鈕?
- 直播系統開發,Flutter建立圓圈圖示按鈕Flutter
- 直播網站程式原始碼,給元件按鈕、文字編輯框等設定圓形邊框、顏色網站原始碼元件
- LayoutTransiton實現簡單的錄製按鈕
- Fiori Elements List Report table 裡的普通按鈕,Global 按鈕 和 Determining 按鈕
- css繪製圓形程式碼例項CSS
- 使用canvas繪製圓形進度條Canvas
- Dreamweaver中CSS怎麼製作徑向圓形漸變的五種方法CSS
- PS製作圓角圖片
- GUI 基於Swing製作貪吃蛇小遊戲GUI遊戲
- 高亮按鈕
- Android Reveal圓形Activity轉場動畫Android動畫
- 標準圓形餅圖Python繪製方法Python
- php短視訊原始碼,按鈕的圓角圖示實現PHP原始碼
- iOS Tabbar中間新增凸起可旋轉按鈕iOStabBar
- log1按鈕介質頁面跳轉
- C#自定義控制元件—旋轉按鈕C#控制元件
- 點選按鈕自動複製剪貼簿功能
- JavaScript時間輪盤:js元素圓形佈局製作時間輪盤動畫JavaScriptJS動畫
- Flutter Button(按鈕)Flutter
- 小程式按鈕
- 復飛按鈕
- 直播app系統原始碼,Flutter MaterialButton 實現圓角邊框按鈕APP原始碼Flutter
- canvas繪製圓形框效果不填充內部Canvas
- canvas繪製圓形鐘錶程式碼例項Canvas
- Java圖形化:Swing表格的使用Java
- ZeroClipboard 多個複製按鈕,多個複製連結 實現方式
- 使用clay.js繪製一棵圓形樹JS