Dưới đây là một ví dụ đầy đủ các giao diện người dùng làm việc với hiển thị trên hình ảnh 1:
(không kỳ diệu - chỉ cần một chút công việc với đồ họa và kiến thức UI cơ bản)
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.awt.geom.GeneralPath;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.SwingConstants;
import javax.swing.plaf.basic.BasicSliderUI;
/**
*
* @see http://stackoverflow.com/a/12297384/714968
*/
public class CustomSliderUI extends BasicSliderUI {
private BasicStroke stroke = new BasicStroke(1f, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND, 0f, new float[]{1f, 2f}, 0f);
public CustomSliderUI(JSlider b) {
super(b);
}
@Override
public void paint(Graphics g, JComponent c) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
super.paint(g, c);
}
@Override
protected Dimension getThumbSize() {
return new Dimension(12, 16);
}
@Override
public void paintTrack(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
Stroke old = g2d.getStroke();
g2d.setStroke(stroke);
g2d.setPaint(Color.BLACK);
if (slider.getOrientation() == SwingConstants.HORIZONTAL) {
g2d.drawLine(trackRect.x, trackRect.y + trackRect.height/2,
trackRect.x + trackRect.width, trackRect.y + trackRect.height/2);
} else {
g2d.drawLine(trackRect.x + trackRect.width/2, trackRect.y,
trackRect.x + trackRect.width/2, trackRect.y + trackRect.height);
}
g2d.setStroke(old);
}
@Override
public void paintThumb(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
int x1 = thumbRect.x + 2;
int x2 = thumbRect.x + thumbRect.width - 2;
int width = thumbRect.width - 4;
int topY = thumbRect.y + thumbRect.height/2 - thumbRect.width/3;
GeneralPath shape = new GeneralPath(GeneralPath.WIND_EVEN_ODD);
shape.moveTo(x1, topY);
shape.lineTo(x2, topY);
shape.lineTo((x1 + x2)/2, topY + width);
shape.closePath();
g2d.setPaint(new Color(81, 83, 186));
g2d.fill(shape);
Stroke old = g2d.getStroke();
g2d.setStroke(new BasicStroke(2f));
g2d.setPaint(new Color(131, 127, 211));
g2d.draw(shape);
g2d.setStroke(old);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
JSlider slider = new JSlider(0, 100);
slider.setPaintTicks(true);
slider.setPaintLabels(true);
slider.setMinorTickSpacing(5);
slider.setMajorTickSpacing(25);
slider.setUI(new CustomSliderUI(slider));
frame.add(slider);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
Bạn có thể dễ dàng sửa đổi kích thước ngón tay cái (gripper) bằng cách thay đổi các giới hạn trả về. Bức vẽ ngón tay cái sẽ thích ứng với bất kỳ kích thước nào. Và bạn cũng có thể dễ dàng tùy chỉnh bức tranh của bất kỳ phần trượt nào khác.
Dưới đây là quan điểm chính thức bằng cách này:

T.B. Tôi đã không thích ứng UI cho thanh trượt dọc, nhưng điều đó không nên mất quá nhiều thời gian.
Nguồn
2012-09-06 09:50:44
từ lần tới tôi sẽ ghi nhớ điều đó. cảm ơn bạn đã sửa đổi – madhur
BTW - 'WindowUtilities' là gì? DYM 'SwingUtilities'? Để được trợ giúp tốt hơn sớm hơn, hãy đăng một [SSCCE] (http://sscce.org/). –
@AndrewThompson lớp học /** Yêu cầu hệ thống sử dụng giao diện gốc, như trong các bản phát hành * trước đó. Kim loại (Java) LAF là mặc định khác. */ – madhur