Skip to content

Commit 8dbc773

Browse files
add support jslider
soon I will try to add the possibility to change the color of the slider (red, blue). coming soon
2 parents 92f84d9 + 4547414 commit 8dbc773

File tree

6 files changed

+202
-1
lines changed

6 files changed

+202
-1
lines changed

lib/material-ui-swing.jar

3.25 KB
Binary file not shown.

src/MaterialUISwingDemo.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import javax.swing.JMenuBar;
1111
import javax.swing.JMenuItem;
1212
import javax.swing.JPanel;
13+
import javax.swing.JSlider;
1314
import javax.swing.JToolBar;
1415
import javax.swing.UIManager;
1516
import javax.swing.UnsupportedLookAndFeelException;
@@ -73,6 +74,12 @@ public static void main (String[] args) {
7374
comboTest.addItem("Prova due");
7475
content.add(labelCombo);
7576
content.add(comboTest);
77+
78+
//settin Slider
79+
JSlider slider = new JSlider();
80+
JSlider sliderVertical = new JSlider(JSlider.VERTICAL);
81+
content.add(slider);
82+
content.add(sliderVertical);
7683

7784
// add everything to the frame
7885
frame.add (bar, BorderLayout.PAGE_START);

src/imgs/slider_point.png

516 Bytes
Loading

src/mdlaf/MaterialLookAndFeel.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import mdlaf.components.password.MaterialPasswordFieldUI;
1313
import mdlaf.components.radiobutton.MaterialRadioButtonUI;
1414
import mdlaf.components.scrollbar.MaterialScrollBarUI;
15+
import mdlaf.components.slider.MaterialSliderUI;
1516
import mdlaf.components.spinner.MaterialSpinnerUI;
1617
import mdlaf.components.tabbedpane.MaterialTabbedPaneUI;
1718
import mdlaf.components.table.MaterialTableHeaderUI;
@@ -23,8 +24,10 @@
2324
import mdlaf.resources.MaterialBorders;
2425
import mdlaf.resources.MaterialColors;
2526
import mdlaf.resources.MaterialFonts;
27+
import mdlaf.resources.MaterialImages;
2628

2729
import javax.swing.BorderFactory;
30+
import javax.swing.ImageIcon;
2831
import javax.swing.UIDefaults;
2932
import javax.swing.plaf.basic.BasicLookAndFeel;
3033
import java.awt.Color;
@@ -48,9 +51,15 @@ public class MaterialLookAndFeel extends BasicLookAndFeel {
4851
private static final String tabbedPaneUI = MaterialTabbedPaneUI.class.getCanonicalName ();
4952
private static final String toggleButtonUI = MaterialToggleButtonUI.class.getCanonicalName ();
5053
private static final String scrollBarUI = MaterialScrollBarUI.class.getCanonicalName ();
51-
//Add Vincenzo
5254
private static final String toolBarUI = MaterialToolBarUI.class.getCanonicalName();
5355
private static final String comboBoxUI = MaterialComboBoxUI.class.getCanonicalName();
56+
private static final String sliderUI = MaterialSliderUI.class.getCanonicalName();
57+
58+
59+
60+
public static String getSliderui() {
61+
return sliderUI;
62+
}
5463

5564
public String getToolBarUI() {
5665
return toolBarUI;
@@ -107,6 +116,7 @@ protected void initClassDefaults (UIDefaults table) {
107116
table.put ("ScrollBarUI", scrollBarUI);
108117
table.put ("ToolBarUI", toolBarUI);
109118
table.put ("ComboBoxUI", comboBoxUI);
119+
table.put ("SliderUI", sliderUI);
110120
}
111121

112122
@Override
@@ -146,5 +156,12 @@ protected void initComponentDefaults (UIDefaults table) {
146156
table.put ("OptionPane.border", MaterialBorders.DEFAULT_SHADOW_BORDER);
147157

148158
table.put ("Button.highlight", MaterialColors.GRAY_200);
159+
160+
table.put("Slider.trackWidth", 20); //Value tmp
161+
table.put("Slider.majorTickLength", 20); //value tmp
162+
table.put("Slider.horizontalThumbIcon", new ImageIcon(MaterialImages.SLIDER_POINT));
163+
table.put("Slider.verticalThumbIcon", new ImageIcon(MaterialImages.SLIDER_POINT));
149164
}
165+
166+
150167
}
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
package mdlaf.components.slider;
2+
3+
import java.awt.Graphics;
4+
5+
import java.awt.Rectangle;
6+
import javax.swing.JComponent;
7+
import javax.swing.JSlider;
8+
import javax.swing.plaf.ComponentUI;
9+
import javax.swing.plaf.metal.MetalLookAndFeel;
10+
import javax.swing.plaf.metal.MetalSliderUI;
11+
import mdlaf.resources.MaterialColors;
12+
import mdlaf.resources.MaterialDrawingUtils;
13+
14+
/**
15+
*
16+
* @author https://github.com/vincenzopalazzo
17+
*
18+
*/
19+
public class MaterialSliderUI extends MetalSliderUI{
20+
21+
public static ComponentUI createUI(JComponent c) {
22+
JSlider slider = (JSlider) c;
23+
//return new MaterialSliderUI(slider);
24+
return new MaterialSliderUI();
25+
}
26+
27+
@Override
28+
public void installUI(JComponent c) {
29+
// TODO Auto-generated method stub
30+
super.installUI(c);
31+
JSlider slider = (JSlider) c;
32+
slider.setBackground(MaterialColors.WHITE);
33+
slider.setPaintTrack(true);
34+
}
35+
36+
@Override
37+
public void paint(Graphics g, JComponent c) {
38+
super.paint(MaterialDrawingUtils.getAliasedGraphics(g), c);
39+
}
40+
41+
/**
42+
* original code of MetalSliderUI
43+
* @return Rectangle
44+
*/
45+
46+
private Rectangle getPaintTrackRect() {
47+
int trackLeft = 0, trackRight, trackTop = 0, trackBottom;
48+
if (slider.getOrientation() == JSlider.HORIZONTAL) {
49+
trackBottom = (trackRect.height - 1) - getThumbOverhang();
50+
trackTop = trackBottom - (getTrackWidth() - 1);
51+
trackRight = trackRect.width - 1;
52+
}
53+
else {
54+
if (this.leftToRightCache) {
55+
trackLeft = (trackRect.width - getThumbOverhang()) -
56+
getTrackWidth();
57+
trackRight = (trackRect.width - getThumbOverhang()) - 1;
58+
}
59+
else {
60+
trackLeft = getThumbOverhang();
61+
trackRight = getThumbOverhang() + getTrackWidth() - 1;
62+
}
63+
trackBottom = trackRect.height - 1;
64+
}
65+
return new Rectangle(trackRect.x + trackLeft, trackRect.y + trackTop,
66+
trackRight - trackLeft, trackBottom - trackTop);
67+
}
68+
69+
/**
70+
* original code of MetalSliderUI with some tricks on the colors
71+
*/
72+
public void paintTrack(Graphics g) {
73+
g.translate( trackRect.x, trackRect.y );
74+
75+
int trackLeft = 0;
76+
int trackTop = 0;
77+
int trackRight;
78+
int trackBottom;
79+
80+
// Draw the track
81+
if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
82+
trackBottom = (trackRect.height - 1) - getThumbOverhang();
83+
trackTop = trackBottom - (getTrackWidth() - 1);
84+
trackRight = trackRect.width - 1;
85+
}
86+
else {
87+
if (this.leftToRightCache) {
88+
trackLeft = (trackRect.width - getThumbOverhang()) -
89+
getTrackWidth();
90+
trackRight = (trackRect.width - getThumbOverhang()) - 1;
91+
}
92+
else {
93+
trackLeft = getThumbOverhang();
94+
trackRight = getThumbOverhang() + getTrackWidth() - 1;
95+
}
96+
trackBottom = trackRect.height - 1;
97+
}
98+
99+
if ( slider.isEnabled() ) {
100+
g.setColor(MaterialColors.LIGHT_BLUE_400 );
101+
g.drawRect( trackLeft, trackTop,
102+
(trackRight - trackLeft) - 1, (trackBottom - trackTop) - 1 );
103+
104+
g.setColor( MaterialColors.LIGHT_BLUE_400 );
105+
g.drawLine( trackLeft + 1, trackBottom, trackRight, trackBottom );
106+
g.drawLine( trackRight, trackTop + 1, trackRight, trackBottom );
107+
108+
g.setColor( MaterialColors.LIGHT_BLUE_400 );
109+
g.drawLine( trackLeft + 1, trackTop + 1, trackRight - 2, trackTop + 1 );
110+
g.drawLine( trackLeft + 1, trackTop + 1, trackLeft + 1, trackBottom - 2 );
111+
}
112+
else {
113+
g.setColor( MetalLookAndFeel.getControlShadow() );
114+
g.drawRect( trackLeft, trackTop,
115+
(trackRight - trackLeft) - 1, (trackBottom - trackTop) - 1 );
116+
}
117+
118+
// Draw the fill
119+
if ( filledSlider ) {
120+
int middleOfThumb;
121+
int fillTop;
122+
int fillLeft;
123+
int fillBottom;
124+
int fillRight;
125+
126+
if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
127+
middleOfThumb = thumbRect.x + (thumbRect.width / 2);
128+
middleOfThumb -= trackRect.x; // To compensate for the g.translate()
129+
fillTop = !slider.isEnabled() ? trackTop : trackTop + 1;
130+
fillBottom = !slider.isEnabled() ? trackBottom - 1 : trackBottom - 2;
131+
132+
if ( !drawInverted() ) {
133+
fillLeft = !slider.isEnabled() ? trackLeft : trackLeft + 1;
134+
fillRight = middleOfThumb;
135+
}
136+
else {
137+
fillLeft = middleOfThumb;
138+
fillRight = !slider.isEnabled() ? trackRight - 1 : trackRight - 2;
139+
}
140+
}
141+
else {
142+
middleOfThumb = thumbRect.y + (thumbRect.height / 2);
143+
middleOfThumb -= trackRect.y; // To compensate for the g.translate()
144+
fillLeft = !slider.isEnabled() ? trackLeft : trackLeft + 1;
145+
fillRight = !slider.isEnabled() ? trackRight - 1 : trackRight - 2;
146+
147+
if ( !drawInverted() ) {
148+
fillTop = middleOfThumb;
149+
fillBottom = !slider.isEnabled() ? trackBottom - 1 : trackBottom - 2;
150+
}
151+
else {
152+
fillTop = !slider.isEnabled() ? trackTop : trackTop + 1;
153+
fillBottom = middleOfThumb;
154+
}
155+
}
156+
157+
if ( slider.isEnabled() ) {
158+
g.setColor( MaterialColors.LIGHT_BLUE_400 );
159+
g.drawLine( fillLeft, fillTop, fillRight, fillTop );
160+
g.drawLine( fillLeft, fillTop, fillLeft, fillBottom );
161+
162+
g.setColor(MaterialColors.LIGHT_BLUE_400 );
163+
g.fillRect( fillLeft + 1, fillTop + 1,
164+
fillRight - fillLeft, fillBottom - fillTop );
165+
}
166+
else {
167+
g.setColor( MetalLookAndFeel.getControlShadow() );
168+
g.fillRect(fillLeft, fillTop, fillRight - fillLeft, fillBottom - fillTop);
169+
}
170+
}
171+
172+
g.translate( -trackRect.x, -trackRect.y );
173+
}
174+
}

src/mdlaf/resources/MaterialImages.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package mdlaf.resources;
22

33
import javax.imageio.ImageIO;
4+
import javax.swing.Icon;
5+
46
import java.awt.image.BufferedImage;
57
import java.io.IOException;
68
import java.io.InputStream;
@@ -17,6 +19,7 @@ public class MaterialImages {
1719
public static final BufferedImage RADIO_BUTTON_OFF = loadImg ("/imgs/radio_button_off.png");
1820
public static final BufferedImage TOGGLE_BUTTON_ON = loadImg ("/imgs/toggle_on.png");
1921
public static final BufferedImage TOGGLE_BUTTON_OFF = loadImg ("/imgs/toggle_off.png");
22+
public static final BufferedImage SLIDER_POINT = loadImg ("/imgs/slider_point.png");
2023

2124
private static BufferedImage loadImg (String imgPath) {
2225
try (InputStream inputStream = MaterialImages.class.getResourceAsStream (imgPath)) {

0 commit comments

Comments
 (0)