栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用图像制作自定义JScrollBar

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用图像制作自定义JScrollBar

我写了一个示例,展示了如何为滚动条的拇指和背景(称为轨迹)设置自定义图像。您需要两个文件,

thumb.png
并且
track.png
用于自定义图像的类文件位于同一位置。我还对图像进行了一些缩放以适合滚动条。只需对此代码进行一些试验。我更改了滚动条(
setPreferredSize
)的宽度,以便更好地查看图像。

要点是,您必须创建自己的类

MyUi
来扩展
BasicScrollBarUI
和覆盖
paintThumb
and
paintTrack
,并使用以下方法个性化滚动条
setUI(new MyUI)

import java.awt.*;import java.io.FileReader;import java.io.IOException;import javax.swing.*;import javax.swing.plaf.metal.metalScrollBarUI;import javax.imageio.ImageIO;import java.io.File;import java.awt.geom.AffineTransform;public class CustomScrollbarUIExample {  public static void main(String[] args) {    JScrollPane before = makeExamplePane();    JScrollPane after = makeExamplePane();    JScrollBar sb=after.getVerticalScrollBar();    sb.setPreferredSize(new Dimension(50, Integer.MAX_VALUE));    sb.setUI(new MyScrollbarUI());    Jframe f = new Jframe();    f.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);    Container c = f.getContentPane();    c.setLayout(new GridLayout(2, 1, 0, 1));    c.add(before);    c.add(after);    f.setSize(450, 400);    f.setVisible(true);  }  private static JScrollPane makeExamplePane() {    String exampleText= "Lorem ipsum dolor sit amet,n consetetur sadipscing elitr,n sed diam nonumy eirmod ntempor invidunt ut labore et dolore nmagna aliquyam erat,n sed diam voluptua. At vero eos et accusam et njusto duo dolores et ea rebum. Stet clitan kasd gubergren, no sean takimata sanctus est Lorem ipsum dolor sit amet.n Lorem ipsum dolor sit amet,n consetetur sadipscing elitr, sed diamn nonumy eirmod tempor invidunt nut labore et doloren magna aliquyam erat, sed diam voluptua.n At vero eos et accusam et justo nduon dolores et ea rebum. Stet clita kasd gubergren, no sean takimata sanctus est Loremn ipsum dolor sit amet. Lorem ipsum dolorn sit amet, consetetur sadipscing elitr,n sed diam nonumyn eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eosn et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est nLorem ipsum dolor sit amet.Duisn autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, veln illum dolore eu feugiat nulla facilisis at vero eros et naccumsan et iusto odio ndignissim qui blandit praesent luptatum zzril delenit auguen duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuern adipiscing elit, sed diam nonummy nibh euismod ntincidunt ut laoreetn dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam,n quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ean commodo consequat. Duis autem vel eum iriure ndolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla nfacilisis at vero eros et accumsan et iusto odio dignissim qui blanditn praesent luptatum zzril delenit augue duis dolore nte feugait nulla facilisi.";    Jtextarea text = new Jtextarea(exampleText);    JScrollPane scroll = new JScrollPane(text);    return scroll;  }  static class MyScrollbarUI extends metalScrollBarUI {    private Image imageThumb, imageTrack;    MyScrollbarUI() {        try { imageThumb = ImageIO.read(new File("thumb.png")); imageTrack = ImageIO.read(new File("track.png"));        } catch (IOException e){}    }    @Override    protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) {     g.translate(thumbBounds.x, thumbBounds.y);        g.setColor( Color.red );        g.drawRect( 0, 0, thumbBounds.width - 2, thumbBounds.height - 1 );        AffineTransform transform = AffineTransform.getScaleInstance((double)thumbBounds.width/imageThumb.getWidth(null),(double)thumbBounds.height/imageThumb.getHeight(null));        ((Graphics2D)g).drawImage(imageThumb, transform, null);        g.translate( -thumbBounds.x, -thumbBounds.y );    }    @Override    protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) {     g.translate(trackBounds.x, trackBounds.y);        ((Graphics2D)g).drawImage(imageTrack,AffineTransform.getScaleInstance(1,(double)trackBounds.height/imageTrack.getHeight(null)),null);        g.translate( -trackBounds.x, -trackBounds.y );    }  }}

有关更多信息,请参考sourcefile

metalScrollBarUI.java



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470152.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号