最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java編程實現(xiàn)swing圓形按鈕實例代碼

 更新時間:2017年11月28日 15:33:45   作者:samzheng99  
這篇文章主要介紹了Java編程實現(xiàn)swing圓形按鈕實例代碼,涉及兩個簡單的Java實現(xiàn)按鈕的代碼,其中一個具有偵測點擊事件的簡單功能,具有一定借鑒價值,需要的朋友可以參考。

Swing是一個為Java設(shè)計的GUI工具包。

Swing是JAVA基礎(chǔ)類的一部分。

Swing包括了圖形用戶界面(GUI)器件如:文本框,按鈕,分隔窗格和表。

Swing提供許多比AWT更好的屏幕顯示元素。它們用純Java寫成,所以同Java本身一樣可以跨平臺運行,這一點不像AWT。它們是JFC的一部分。它們支持可更換的面板和主題(各種操作系統(tǒng)默認(rèn)的特有主題),然而不是真的使用原生平臺提供的設(shè)備,而是僅僅在表面上模仿它們。這意味著你可以在任意平臺上使用JAVA支持的任意面板。輕量級組件的缺點則是執(zhí)行速度較慢,優(yōu)點就是可以在所有平臺上采用統(tǒng)一的行為。

下面看看實現(xiàn)按鈕的簡單實例:

import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

class RButton extends JButton {
	public RButton(String label) {
		super(label);
		// 這些聲明把按鈕擴(kuò)展為一個圓而不是一個橢圓。
		Dimension size = getPreferredSize();
		size.width = size.height = Math.max(size.width, size.height);
		setPreferredSize(size);
		// 這個調(diào)用使JButton不畫背景,而允許我們畫一個圓的背景。
		setContentAreaFilled(false);
		this.setBackground(Color.GRAY);
	}

	// 畫圓的背景和標(biāo)簽
	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);
		// 這個調(diào)用會畫一個標(biāo)簽和焦點矩形。
		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) {
		// 如果按鈕改變大小,產(chǎn)生一個新的形狀對象。
		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) {
		// 產(chǎn)生一個帶‘Jackpot'標(biāo)簽的按鈕。
		JButton button = new RButton("Jackpot");
		ImageIcon ic = new ImageIcon("E://clientForMssql//Icons//item_group.gif");
		JButton button2 = new JButton(ic);
		button.setBackground(Color.GRAY);
		// 產(chǎn)生一個框架以顯示這個按鈕。
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// frame.getContentPane().setBackground(Color.GRAY);
		frame.getContentPane().add(button);
		frame.getContentPane().add(button2);
		frame.getContentPane().setLayout(new FlowLayout());
		frame.setSize(200, 200);
		frame.setVisible(true);
	}
}

結(jié)果:

接著再分享一則實現(xiàn)簡單點擊事件的按鈕Java示例。

這是一個關(guān)于制作圓形Swing按鈕的技巧。事實上,這個技巧中的知識方便的適用于任何形狀的按鈕,但我們只作一個圓形的按鈕。當(dāng)你制作一個圓形的按鈕時,需要做兩件事。第一件事是重載一個適當(dāng)?shù)睦L畫方法以畫出一個圓形。第二件事是設(shè)置一些事件使得只有當(dāng)你點擊圓形按鈕的范圍中的時侯按鈕才會作出響應(yīng)(不是包含圓形按鈕的矩形的范圍中)。

import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

public class RoundButton extends JButton {
	public RoundButton(String label) {
		super(label);
		// 這些聲明把按鈕擴(kuò)展為一個圓而不是一個橢圓。
		Dimension size = getPreferredSize();
		size.width = size.height = Math.max(size.width, size.height);
		setPreferredSize(size);

		// 這個調(diào)用使JButton不畫背景,而允許我們畫一個圓的背景。
		setContentAreaFilled(false);
	}

	// 畫圓的背景和標(biāo)簽
	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);
		// 這個調(diào)用會畫一個標(biāo)簽和焦點矩形。
		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) {
		// 如果按鈕改變大小,產(chǎn)生一個新的形狀對象。
		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) {
		// 產(chǎn)生一個帶‘Jackpot'標(biāo)簽的按鈕。
		JButton button = new RoundButton("Jackpot");
		button.setBackground(Color.green);
		// 產(chǎn)生一個框架以顯示這個按鈕。
		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);
	}
}

結(jié)果:

點擊事件:

由于我們想保留JButton的大部分功能,我們讓RoundButton類繼承了JButton類。在RoundButton的構(gòu)造方法中,setContentAreaFilled()方法被調(diào)用。這就讓按鈕畫了一個矩形的焦點區(qū),但不畫背景。

現(xiàn)在我們需要畫一個圓的背景。這是通過重載paintComponent()方法實現(xiàn)的。那個方法使用Graphics.fillOval()方法畫一個實心的圓。然后paintComponent()方法調(diào)用super.paintComponent()在這個實心圓的上面畫了一個標(biāo)簽。

這個例子還重載了paintBorder()方法以在圓形按鈕的邊界上畫一個邊。如果你不想要邊框,你也可以不重載這個方法。這個方法調(diào)用了Graphics.drawOval()方法以在圓的邊界上畫一個細(xì)的邊框。

注意:在JDKTM1.2.2中,當(dāng)你將鼠標(biāo)拖進(jìn)或拖出按鈕的范圍時,JButton的行為有一個小BUG。理論上,當(dāng)你在圓形按鈕上點擊鼠標(biāo)然后拖動鼠標(biāo)離開按鈕的邊界時,按鈕應(yīng)該改變它的外形。當(dāng)你拖動鼠標(biāo)進(jìn)入按鈕的邊界內(nèi)時,按鈕應(yīng)回復(fù)它的外形。不幸的是,包含這個行為的代碼不能調(diào)用contains()方法。代替它的是只使用按鈕的‘限制范圍'(這是包含按鈕的最小矩形范圍)注意,如果你在圓形邊界內(nèi)輕微的拖動鼠標(biāo),也就是說離開圓形的范圍但不離開邊界,按鈕將不會改變它的外形。

總結(jié)

以上就是本文關(guān)于Java編程實現(xiàn)swing圓形按鈕實例代碼的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • 解決SpringMVC 返回Java8 時間JSON數(shù)據(jù)的格式化問題處理

    解決SpringMVC 返回Java8 時間JSON數(shù)據(jù)的格式化問題處理

    本篇文章主要介紹了解決SpringMVC 返回Java8 時間JSON數(shù)據(jù)的格式化問題處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Kafka簡單客戶端編程實例

    Kafka簡單客戶端編程實例

    這篇文章主要為大家詳細(xì)介紹了Kafka簡單客戶端編程實例,利用Kafka的API進(jìn)行客戶端編程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • SpringBoot實現(xiàn)AOP切面的三種方式

    SpringBoot實現(xiàn)AOP切面的三種方式

    Spring,SpringBoot框架憑借多種高效機(jī)制,顯著增強(qiáng)了代碼的功能性,并實現(xiàn)了切面編程(AOP)的精髓,其核心亮點之一,是運用動態(tài)代理技術(shù),無需觸動源代碼即可在Bean的運行時為其動態(tài)織入額外功能,本文給大家介紹了SpringBoot通過3種方式實現(xiàn)AOP切面,需要的朋友可以參考下
    2024-08-08
  • Java實現(xiàn)把文件及文件夾壓縮成zip

    Java實現(xiàn)把文件及文件夾壓縮成zip

    這篇文章主要介紹了Java實現(xiàn)把文件及文件夾壓縮成zip,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Spring定時服務(wù)QuartZ原理及代碼案例

    Spring定時服務(wù)QuartZ原理及代碼案例

    這篇文章主要介紹了Spring定時服務(wù)QuartZ原理及代碼案例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Springboot+AOP實現(xiàn)返回數(shù)據(jù)提示語國際化的示例代碼

    Springboot+AOP實現(xiàn)返回數(shù)據(jù)提示語國際化的示例代碼

    這篇文章主要介紹了Springboot+AOP實現(xiàn)返回數(shù)據(jù)提示語國際化的示例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • Java中Set&List的迭代器實現(xiàn)步驟解析

    Java中Set&List的迭代器實現(xiàn)步驟解析

    這篇文章主要介紹了Java中Set&List的迭代器實現(xiàn)步驟解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • SpringCloud的那些中間件問題

    SpringCloud的那些中間件問題

    這篇文章主要介紹了SpringCloud的那些中間件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 關(guān)于JVM垃圾回收的java.lang.ref.Finalizer問題

    關(guān)于JVM垃圾回收的java.lang.ref.Finalizer問題

    這篇文章主要介紹了關(guān)于JVM垃圾回收的java.lang.ref.Finalizer問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 一篇文章帶你了解Maven的生命周期

    一篇文章帶你了解Maven的生命周期

    這篇文章主要為大家介紹了Maven的生命周期?,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01

最新評論

高雄市| 河北区| 延川县| 安仁县| 福泉市| 南汇区| 曲沃县| 阿坝县| 萨嘎县| 且末县| 鸡西市| 新晃| 忻州市| 呼伦贝尔市| 昌江| 赣州市| 皮山县| 浦东新区| 昌吉市| 林州市| 类乌齐县| 庆安县| 堆龙德庆县| 虞城县| 犍为县| 南陵县| 绵竹市| 石景山区| 社会| 蒙自县| 乌拉特前旗| 峨眉山市| 定南县| 清水河县| 金坛市| 焉耆| 万安县| 宁陕县| 垣曲县| 扶绥县| 平谷区|