日韩性视频-久久久蜜桃-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的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久久久一区二区 | 成人在线免费观看网址 | 日韩在线网址 | 国产网站久久 | av片免费在线播放 | 日本欧美在线播放 | 992在线观看 | 久久国产二区 | 北条麻妃av在线 | 妺妺窝人体色www聚色窝仙踪 | 女人的毛片 | 久久久久亚洲av无码专区喷水 | 久久免费视频1 | 亚洲女人视频 | 精品在线不卡 | 久久99久久久| 天天曰天天爽 | 国产理论片在线观看 | 日本性爱动漫 | 日韩黄色免费电影 | 中日韩男男gay无套 人人草人人干 | 超碰人人爱 | 亚洲高清视频在线 | 香港三级日本三级韩国三级 | 特黄aaaaaaaaa毛片免费视频 | 亚洲av高清一区二区三区 | 成人午夜视频免费在线观看 | 日韩激情国产 | 成人乱人乱一区二区三区 | 久久久久成人精品免费播放动漫 | 超碰国产91 | 免费av观看 | 久久亚洲精品国产 | 亚洲成人播放器 | 男女日屁视频 | 中文字幕亚洲区 | 国产精品第 | 无码人妻精品一区二区三区66 | 免费看h网站 | 天天干免费视频 | 日韩精品一区二区视频 | 精品国产一区二区在线观看 | 自拍视频在线 | 亚洲二区一区 | 色综合久久88色综合天天免费 | 成年人视频在线播放 | 欧美亚洲图片小说 | 国产日韩欧美在线观看视频 | 日韩三级在线播放 | 黑料视频在线观看 | 黄色网页在线看 | 一级视频片 | 久久9精品区-无套内射无码 | 黑人与日本少妇高潮 | 激烈娇喘叫1v1高h糙汉 | 国产福利视频导航 | 亚洲熟女乱色一区二区三区 | 亚洲热视频| 超碰在线影院 | 一久久| 亚洲欧美v| 全部毛片永久免费看 | 日本久久高清视频 | 黄色片一区二区三区 | 久草国产在线观看 | 国产精品国产三级国产aⅴ原创 | 无码人妻精品一区二区三区不卡 | 国产在线一区二区 | 九色91在线 | 少妇性bbb搡bbb爽爽爽欧美 | 亚洲伦理网| 男女黄床上色视频免费的软件 | 91视频中文字幕 | 国产精品久久久久av | 色哟哟无码精品一区二区三区 | 中文字幕无码毛片免费看 | 中国大陆一级毛片 | 日韩av电影一区 | 青青草激情 | 打白嫩屁屁网站视频短裙 | 久久久久久激情 | 国产一区精品久久 | 国产日韩欧美中文 | 热久久这里只有精品 | 爱爱精品视频 | 男女免费看 | 国产亚洲色婷婷久久 | 爱的天堂| 日韩中文一区 | 精品久久久久久一区二区里番 | 日韩美女三级 | 亚洲一区二区三区四区在线 | 女同二区 | 亚洲国产精品久久久久爰色欲 | 91网址入口 | 久久久久久1 | 欧美三级在线播放 | 中国人与拘一级毛片 | 久久久免费看 |