欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)默認的特有主題),然而不是真的使用原生平臺提供的設(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);
		// 這些聲明把按鈕擴展為一個圓而不是一個橢圓。
		Dimension size = getPreferredSize();
		size.width = size.height = Math.max(size.width, size.height);
		setPreferredSize(size);
		// 這個調(diào)用使JButton不畫背景,而允許我們畫一個圓的背景。
		setContentAreaFilled(false);
		this.setBackground(Color.GRAY);
	}

	// 畫圓的背景和標簽
	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)用會畫一個標簽和焦點矩形。
		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'標簽的按鈕。
		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按鈕的技巧。事實上,這個技巧中的知識方便的適用于任何形狀的按鈕,但我們只作一個圓形的按鈕。當你制作一個圓形的按鈕時,需要做兩件事。第一件事是重載一個適當?shù)睦L畫方法以畫出一個圓形。第二件事是設(shè)置一些事件使得只有當你點擊圓形按鈕的范圍中的時侯按鈕才會作出響應(不是包含圓形按鈕的矩形的范圍中)。

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

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

		// 這個調(diào)用使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);
		// 這個調(dià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'標簽的按鈕。
		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()在這個實心圓的上面畫了一個標簽。

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

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

總結(jié)

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

相關(guān)文章

  • 如何給HttpServletRequest增加消息頭

    如何給HttpServletRequest增加消息頭

    這篇文章主要介紹了如何給HttpServletRequest增加消息頭的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring Boot命令行運行器的實現(xiàn)方法

    Spring Boot命令行運行器的實現(xiàn)方法

    這篇文章主要介紹了Spring Boot命令行運行器的實現(xiàn)方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10
  • Java中notify和notifyAll的區(qū)別及何時使用

    Java中notify和notifyAll的區(qū)別及何時使用

    本文主要介紹了Java中notify和notifyAll的區(qū)別及何時使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 詳解Java String中intern方法的原理與使用

    詳解Java String中intern方法的原理與使用

    這篇文章主要為大家介紹了Java String中intern方法的原理以及使用。文中通過圖片和示例代碼進行了詳細展示,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-05-05
  • Java Reference源碼解析

    Java Reference源碼解析

    這篇文章主要為大家詳細解析了Java Reference源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • SpringBoot注入自定義的配置文件的方法詳解

    SpringBoot注入自定義的配置文件的方法詳解

    在實際的項目開發(fā)過程中,我們經(jīng)常需要將某些變量從代碼里面抽離出來,放在配置文件里面。今天,我們就一起來聊一聊SpringBoot加載配置文件的幾種玩法,需要的可以參考一下
    2022-09-09
  • Java如何獲取數(shù)組和字符串的長度(length還是length())

    Java如何獲取數(shù)組和字符串的長度(length還是length())

    這篇文章主要介紹了Java如何獲取數(shù)組和字符串的長度(length還是length()),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • 盤點SpringBoot中@Async注解的遇到的坑點及解決辦法

    盤點SpringBoot中@Async注解的遇到的坑點及解決辦法

    SpringBoot是一個流行的Java開發(fā)框架,在異步編程方面,Spring Boot提供了@Async注解,它能夠讓方法異步執(zhí)行,然而,在使用@Async注解時,有一些潛在的坑需要注意,本文將深入探討Spring Boot中使用@Async注解時可能遇到的8大坑點,并提供相應的解決方案
    2024-03-03
  • Kotlin 與 Java基本語法對比

    Kotlin 與 Java基本語法對比

    這篇文章主要介紹了Kotlin 與 Java基本語法對比的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • java鎖升級過程過程詳解

    java鎖升級過程過程詳解

    這篇文章主要介紹了Java鎖升級的實現(xiàn)過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-08-08

最新評論