日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Java自定义JSlider UI

發布時間:2023/12/10 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java自定义JSlider UI 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java自定義JSlider UI JSlider作為Swing中提供的滑標組件, 以圖形方式在有界區間內通過移動滑塊來選擇值,滑塊可以顯示主刻度標記和次刻度標記。大量應用于如播放器中的音量設定等領域中。

但是JSlider本身提供的UI樣式很單調,不足以滿足用戶的審美需求,往往需要我們自行重構其UI。

下面我給出一個簡單的例子。

package?org.loon.framework.swing.test;

import?java.awt.BorderLayout;
import?java.awt.Color;
import?java.awt.Component;
import?java.awt.Dimension;
import?java.awt.EventQueue;
import?java.awt.GradientPaint;
import?java.awt.Graphics;
import?java.awt.Graphics2D;
import?java.awt.Polygon;
import?java.awt.Rectangle;
import?java.awt.RenderingHints;

import?javax.swing.Box;
import?javax.swing.JFrame;
import?javax.swing.JLabel;
import?javax.swing.JPanel;
import?javax.swing.JSlider;
import?javax.swing.WindowConstants;
import?javax.swing.event.ChangeEvent;
import?javax.swing.event.ChangeListener;

/**?*//**
?*?<p>
?*?Title:?LoonFramework
?*?</p>
?*?<p>
?*?Description:
?*?</p>
?*?<p>
?*?Copyright:?Copyright?(c)?2007
?*?</p>
?*?<p>
?*?Company:?LoonFramework
?*?</p>
?*?
?*?
@author?chenpeng
?*?@email:ceponline@yahoo.com.cn
?*?
@version?0.1
?
*/

public?class?ExampleSlider?extends?JPanel?...{
????
/**?*//**
?????*?
?????
*/

????
private?static?final?long?serialVersionUID?=?1L;

????
public?ExampleSlider()?...{
????????
//?設定布局器
????????super(new?BorderLayout());
????????
//?設定監聽器
????????ChangeListener?listener?=?new?ChangeListener()?...{
????????????
public?void?stateChanged(ChangeEvent?e)?...{
????????????????
if?(e.getSource()?instanceof?JSlider)?...{
????????????????????System.out.println(
"刻度:?"
????????????????????????????
+?((JSlider)?e.getSource()).getValue());
????????????????}

????????????}

????????}
;
????????
//?設定JSlider1
????????JSlider?s1?=?new?JSlider(0,?100,?0);
????????
//?注入自定義ui
????????s1.setUI(new?MySliderUI());
????????
//?主刻度
????????s1.setMajorTickSpacing(10);
????????
//?次刻度
????????s1.setMinorTickSpacing(5);
????????
//?設定為顯示
????????s1.setPaintTicks(true);
????????s1.setPaintLabels(
true);
????????
//?監聽slider1
????????s1.addChangeListener(listener);
????????
//?設定JSlider2
????????JSlider?s2?=?new?JSlider(0,?100,?0);
????????
//?使用MetalSliderUI為ui
????????s2.setUI(new?javax.swing.plaf.metal.MetalSliderUI()?...{
????????????
protected?void?paintHorizontalLabel(Graphics?g,?int?v,?Component?l)?...{
????????????????JLabel?lbl?
=?(JLabel)?l;
????????????????lbl.setForeground(Color.green);
????????????????
super.paintHorizontalLabel(g,?v,?lbl);
????????????}

????????}
);
????????
????????s2.setForeground(Color.BLUE);
????????s2.setMajorTickSpacing(
10);
????????s2.setMinorTickSpacing(
5);
????????s2.setPaintTicks(
true);
????????s2.setPaintLabels(
true);
????????s2.addChangeListener(listener);

????????
//使用盒式容器
????????Box?box?=?Box.createVerticalBox();
????????box.add(Box.createVerticalStrut(
5));
????????box.add(s1);
????????box.add(Box.createVerticalStrut(
5));
????????box.add(s2);
????????box.add(Box.createVerticalGlue());
????????add(box,?BorderLayout.CENTER);
????????add(Box.createHorizontalStrut(
5),?BorderLayout.WEST);
????????add(Box.createHorizontalStrut(
5),?BorderLayout.EAST);
????????
//設定窗體大小
????????setPreferredSize(new?Dimension(240,?100));
????}


????
public?static?void?main(String[]?args)?...{
????????EventQueue.invokeLater(
new?Runnable()?...{
????????????
public?void?run()?...{
????????????????createUI();
????????????}

????????}
);
????}


????
public?static?void?createUI()?...{
????????JFrame?frame?
=?new?JFrame("音量刻度設置");
????????frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
????????frame.getContentPane().add(
new?ExampleSlider());
????????frame.setResizable(
false);
????????frame.pack();
????????
//居中
????????frame.setLocationRelativeTo(null);
????????frame.setVisible(
true);
????}

}


class?MySliderUI?extends?javax.swing.plaf.metal.MetalSliderUI?...{
????
/**?*//**
?????*?繪制指示物
?????
*/

????
public?void?paintThumb(Graphics?g)?...{
????????Graphics2D?g2d?
=?(Graphics2D)?g;
????????g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,?RenderingHints.VALUE_ANTIALIAS_ON);
????????
//填充橢圓框為當前thumb位置
????????g2d.fillOval(thumbRect.x,?thumbRect.y,?thumbRect.width,
????????????????????????thumbRect.height);
????????
//也可以帖圖(利用鼠標事件轉換image即可體現不同狀態)
????????
//g2d.drawImage(image,?thumbRect.x,?thumbRect.y,?thumbRect.width,thumbRect.height,null);
????}


????
/**?*//**?
?????*?繪制刻度軌跡
?????
*/

????
public?void?paintTrack(Graphics?g)?...{
????????
int?cy,?cw;
????????Rectangle?trackBounds?
=?trackRect;
????????
if?(slider.getOrientation()?==?JSlider.HORIZONTAL)?...{
????????????Graphics2D?g2?
=?(Graphics2D)?g;
????????????cy?
=?(trackBounds.height?/?2)?-?2;
????????????cw?
=?trackBounds.width;

????????????g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
????????????????????RenderingHints.VALUE_ANTIALIAS_ON);
????????????g2.translate(trackBounds.x,?trackBounds.y?
+?cy);

????????????
//?背景設為灰色
????????????g2.setPaint(Color.GRAY);
????????????g2.fillRect(
0,?-cy,?cw,?cy?*?2);

????????????
int?trackLeft?=?0;

????????????
int?trackRight?=?0;

????????????trackRight?
=?trackRect.width?-?1;

????????????
int?middleOfThumb?=?0;

????????????
int?fillLeft?=?0;

????????????
int?fillRight?=?0;

????????????
//坐標換算
????????????middleOfThumb?=?thumbRect.x?+?(thumbRect.width?/?2);
????????????middleOfThumb?
-=?trackRect.x;

????????????
if?(!drawInverted())?...{
????????????????fillLeft?
=?!slider.isEnabled()???trackLeft?:?trackLeft?+?1;
????????????????fillRight?
=?middleOfThumb;
????????????}
?else?...{
????????????????fillLeft?
=?middleOfThumb;
????????????????fillRight?
=?!slider.isEnabled()???trackRight?-?1
????????????????????????:?trackRight?
-?2;
????????????}

????????????
//?設定漸變
????????????g2.setPaint(new?GradientPaint(0,?0,?new?Color(0,?100,?100),?cw,?0,
????????????????????
new?Color(0,?255,?100),?true));
????????????g2.fillRect(
0,?-cy,?fillRight?-?fillLeft,?cy?*?2);

????????????g2.setPaint(slider.getBackground());
????????????Polygon?polygon?
=?new?Polygon();
????????????polygon.addPoint(
0,?cy);
????????????polygon.addPoint(
0,?-cy);
????????????polygon.addPoint(cw,?
-cy);
????????????g2.fillPolygon(polygon);
????????????polygon.reset();

????????????g2.setPaint(Color.WHITE);
????????????g2.drawLine(
0,?cy,?cw?-?1,?cy);

????????????g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
????????????????????RenderingHints.VALUE_ANTIALIAS_OFF);
????????????g2.translate(
-trackBounds.x,?-(trackBounds.y?+?cy));
????????}
?else?...{
????????????
super.paintTrack(g);
????????}

????}

}



效果圖:
posted on 2007-12-18 14:05 cping 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/cping1982/archive/2007/12/18/2258085.html

總結

以上是生活随笔為你收集整理的Java自定义JSlider UI的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产福利在线看 | 成年人视频免费 | 久久91亚洲人成电影网站 | 精品偷拍网 | 日韩毛片在线播放 | 天天干天天舔 | 伊人视频| 日韩一级完整毛片 | 日韩av高清在线播放 | 天堂av一区二区三区 | 久草福利在线 | 精品免费| 亚洲熟女少妇一区 | 日韩精品免费看 | 91免费在线观看网站 | 99这里只有精品视频 | 色视屏| 国产精品久久久久久白浆 | 蜜桃视频久久一区免费观看入口 | 亚洲不卡免费视频 | 久草手机在线观看 | 揉我啊嗯~喷水了h视频 | 色婷婷综合久久久久中文字幕 | 精品在线视频免费观看 | 中文字幕日韩精品在线观看 | 97操操| 激情五月亚洲 | 色乱码一区二区三区在线男奴 | 波多野结衣久久 | 日本美女全裸 | 亚洲免费精品视频 | 亚洲色图15p| 91视频污在线观看 | 丁香婷婷视频 | 原创少妇半推半就88av | 激情黄色小视频 | 娇妻玩4p被三个男人伺候电影 | 欧美亚一区二区三区 | 久久精品韩国 | 久久久高清视频 | 草草影院在线播放 | 国产一二三精品 | 婷婷伊人久久 | 欧美日韩一区二区久久 | 成人欧美在线观看 | 亚欧洲精品在线视频免费观看 | 女人的洗澡毛片毛多 | 亚洲国产一区二区在线观看 | 日本中文在线观看 | 视频网站在线观看18 | 农村妇女毛片 | 日鲁鲁 | 欧美大片www | 欧美aaaa视频 | 亚洲成在线观看 | 午夜精品福利视频 | 久久免费毛片 | 亚洲va中文字幕 | 国产又色又爽无遮挡免费动态图 | 青苹果av| 第一页在线 | 日韩中文字幕一区二区 | 精品人妻大屁股白浆无码 | 我想看一级黄色片 | 污污的网站在线免费观看 | 成人永久免费 | 亚洲av无码精品色午夜 | av在线不卡免费看 | 96亚洲精品久久久蜜桃 | 久久久久久亚洲精品中文字幕 | 中文字幕人成人乱码亚洲电影 | 我的丝袜美腿尤物麻麻 | 日本视频www | 欧美女优一区 | 婷婷激情五月综合 | 九九在线免费视频 | 成人午夜激情网 | www爱爱| 亚洲永久无码精品 | 91亚洲精品久久久蜜桃借种 | 欧美一级片观看 | 98精品视频 | www.黄色大片 | 国产女人高潮的av毛片 | aaa成人 | 网址av| 天天躁日日躁aaaxxⅹ | 欧美日韩少妇精品 | 91高清无打码 | 久久亚洲综合国产精品99麻豆精品福利 | 中国一级片在线观看 | 91夜色视频 | 成人动漫一区二区 | 久久久中文字幕 | 性色av蜜臀av色欲av | 91片黄在线观 | 少妇av一区二区三区 | 超碰97免费 | 欧美人与性动交g欧美精器 国产在线视频91 |