Skip to content

Commit 761d071

Browse files
author
atarw
committed
added jtree support
1 parent 76aa2be commit 761d071

14 files changed

+322
-107
lines changed

.idea/workspace.xml

Lines changed: 156 additions & 99 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/material-ui-swing.jar

5.43 KB
Binary file not shown.

src/imgs/down_arrow.png

94 Bytes
Loading

src/imgs/right_arrow.png

111 Bytes
Loading

src/mdlaf/MaterialColors.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ public static Color bleach (Color color, float amount) {
1313
int blue = (int) ((color.getBlue () * (1 - amount) / 255 + amount) * 255);
1414
return new Color (red, green, blue);
1515
}
16+
17+
private MaterialColors () {}
1618
}

src/mdlaf/MaterialImages.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package mdlaf;
2+
3+
import javax.imageio.ImageIO;
4+
import java.awt.image.BufferedImage;
5+
import java.io.IOException;
6+
import java.io.InputStream;
7+
8+
public class MaterialImages {
9+
10+
public static final BufferedImage RIGHT_ARROW = loadImg ("/imgs/right_arrow.png");
11+
public static final BufferedImage DOWN_ARROW = loadImg ("/imgs/down_arrow.png");
12+
13+
private static BufferedImage loadImg (String imgPath) {
14+
try (InputStream inputStream = MaterialImages.class.getResourceAsStream (imgPath)) {
15+
return ImageIO.read (inputStream);
16+
}
17+
catch (IOException e) {
18+
e.printStackTrace ();
19+
throw new RuntimeException ("Image " + imgPath + " wasn't loaded");
20+
}
21+
}
22+
23+
private MaterialImages () {}
24+
}

src/mdlaf/MaterialLookAndFeel.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import mdlaf.table.MaterialTableHeaderUI;
66
import mdlaf.table.MaterialTableUI;
77
import mdlaf.textfield.MaterialTextFieldUI;
8+
import mdlaf.tree.MaterialTreeUI;
89

910
import javax.swing.BorderFactory;
1011
import javax.swing.UIDefaults;
@@ -18,21 +19,22 @@ public class MaterialLookAndFeel extends BasicLookAndFeel {
1819
private static final String passwordFieldUI = MaterialPasswordFieldUI.class.getCanonicalName ();
1920
private static final String tableUI = MaterialTableUI.class.getCanonicalName ();
2021
private static final String tableHeaderUI = MaterialTableHeaderUI.class.getCanonicalName ();
22+
private static final String treeUI = MaterialTreeUI.class.getCanonicalName ();
2123

2224
@Override
2325

2426
public String getName () {
25-
return "mdlaf.MaterialLookAndFeel";
27+
return "Material Look And Feel";
2628
}
2729

2830
@Override
2931
public String getID () {
30-
return "mdlaf.MaterialLookAndFeel";
32+
return "MaterialLookAndFeel";
3133
}
3234

3335
@Override
3436
public String getDescription () {
35-
return "A modern, Material Design UI for Java Swing";
37+
return "A modern Material Design UI for Java Swing";
3638
}
3739

3840
@Override
@@ -53,6 +55,7 @@ protected void initClassDefaults (UIDefaults table) {
5355
table.put ("PasswordFieldUI", passwordFieldUI);
5456
table.put ("TableUI", tableUI);
5557
table.put ("TableHeaderUI", tableHeaderUI);
58+
table.put ("TreeUI", treeUI);
5659
}
5760

5861
@Override

src/mdlaf/button/MaterialButtonUI.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,9 @@ private void paintBackground (final Graphics g, final JComponent c) {
4747
g.setColor (c.getBackground ());
4848
g.fillRoundRect (0, 0, c.getWidth (), c.getHeight (), 7, 7);
4949
}
50+
51+
@Override
52+
public String getPropertyPrefix () {
53+
return "Button";
54+
}
5055
}

src/mdlaf/password/MaterialPasswordFieldUI.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,12 +146,12 @@ public void paintBackground (final Graphics g) {
146146

147147
@Override
148148
public void focusGained (FocusEvent e) {
149-
getComponent ().setBackground (focusedBackground);
149+
e.getComponent ().setBackground (focusedBackground);
150150
}
151151

152152
@Override
153153
public void focusLost (FocusEvent e) {
154-
getComponent ().setBackground (unfocusedBackground);
154+
e.getComponent ().setBackground (unfocusedBackground);
155155
}
156156

157157
@Override

src/mdlaf/table/MaterialTableCellEditor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class MaterialTableCellEditor extends DefaultCellEditor {
1010
@Override
1111
public Component getTableCellEditorComponent (JTable table, Object value, boolean isSelected, int rowIndex, int vColIndex) {
1212
JTextField textField = (JTextField) super.getTableCellEditorComponent (table, value, isSelected, rowIndex, vColIndex);
13-
textField.setText ((String) value);
13+
textField.setText (value.toString ());
1414

1515
return textField;
1616
}

src/mdlaf/textfield/MaterialTextFieldUI.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,12 +147,12 @@ public void paintBackground (final Graphics g) {
147147

148148
@Override
149149
public void focusGained (FocusEvent e) {
150-
getComponent ().setBackground (focusedBackground);
150+
e.getComponent ().setBackground (focusedBackground);
151151
}
152152

153153
@Override
154154
public void focusLost (FocusEvent e) {
155-
getComponent ().setBackground (unfocusedBackground);
155+
e.getComponent ().setBackground (unfocusedBackground);
156156
}
157157

158158
@Override
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package mdlaf.tree;
2+
3+
import javax.swing.JTextField;
4+
import javax.swing.JTree;
5+
import javax.swing.tree.DefaultTreeCellEditor;
6+
import javax.swing.tree.DefaultTreeCellRenderer;
7+
import javax.swing.tree.TreeCellEditor;
8+
import java.awt.Component;
9+
import java.awt.event.KeyAdapter;
10+
import java.awt.event.KeyEvent;
11+
12+
public class MaterialTreeCellEditor extends DefaultTreeCellEditor {
13+
14+
private JTextField textField;
15+
16+
private void init () {
17+
textField = new JTextField ();
18+
19+
textField.addKeyListener (new KeyAdapter () {
20+
@Override
21+
public void keyTyped (KeyEvent e) {
22+
if (e.getKeyChar () == KeyEvent.VK_ENTER)
23+
stopCellEditing ();
24+
}
25+
});
26+
}
27+
28+
@Override
29+
public Component getTreeCellEditorComponent (JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) {
30+
textField.setText (value.toString ());
31+
return textField;
32+
}
33+
34+
@Override
35+
public Object getCellEditorValue () {
36+
return textField.getText ();
37+
}
38+
39+
public MaterialTreeCellEditor (JTree tree, DefaultTreeCellRenderer renderer) {
40+
super (tree, renderer);
41+
init ();
42+
}
43+
44+
public MaterialTreeCellEditor (JTree tree, DefaultTreeCellRenderer renderer, TreeCellEditor editor) {
45+
super (tree, renderer, editor);
46+
init ();
47+
}
48+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package mdlaf.tree;
2+
3+
import mdlaf.MaterialColors;
4+
import mdlaf.MaterialFonts;
5+
import mdlaf.MaterialImages;
6+
7+
import javax.swing.BorderFactory;
8+
import javax.swing.ImageIcon;
9+
import javax.swing.JComponent;
10+
import javax.swing.JTree;
11+
import javax.swing.tree.DefaultTreeCellRenderer;
12+
import java.awt.Color;
13+
import java.awt.Component;
14+
15+
public class MaterialTreeCellRenderer extends DefaultTreeCellRenderer {
16+
17+
@Override
18+
public Component getTreeCellRendererComponent (JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
19+
JComponent component = (JComponent) super.getTreeCellRendererComponent (tree, value, isSelected, expanded, leaf, row, hasFocus);
20+
component.setBorder (BorderFactory.createEmptyBorder (5, 2, 5, 2));
21+
22+
return component;
23+
}
24+
25+
public MaterialTreeCellRenderer () {
26+
setTextSelectionColor (Color.BLACK);
27+
setTextNonSelectionColor (Color.BLACK);
28+
29+
setBackgroundSelectionColor (MaterialColors.LIGHT_GRAY);
30+
setBackgroundNonSelectionColor (Color.WHITE);
31+
32+
setBorderSelectionColor (null);
33+
34+
setClosedIcon (new ImageIcon (MaterialImages.RIGHT_ARROW));
35+
setOpenIcon (new ImageIcon (MaterialImages.DOWN_ARROW));
36+
37+
setFont (MaterialFonts.REGULAR);
38+
}
39+
}

src/mdlaf/tree/MaterialTreeUI.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package mdlaf.tree;
2+
3+
import mdlaf.MaterialFonts;
4+
5+
import javax.swing.JComponent;
6+
import javax.swing.JTree;
7+
import javax.swing.plaf.ComponentUI;
8+
import javax.swing.plaf.basic.BasicTreeUI;
9+
import javax.swing.tree.DefaultTreeCellRenderer;
10+
import javax.swing.tree.TreeCellEditor;
11+
12+
public class MaterialTreeUI extends BasicTreeUI {
13+
14+
public static ComponentUI createUI (final JComponent c) {
15+
return new MaterialTreeUI ();
16+
}
17+
18+
@Override
19+
public void installUI (JComponent c) {
20+
super.installUI (c);
21+
JTree tree = (JTree) c;
22+
23+
DefaultTreeCellRenderer renderer = new MaterialTreeCellRenderer ();
24+
TreeCellEditor editor = new MaterialTreeCellEditor (tree, renderer);
25+
26+
tree.setCellRenderer (renderer);
27+
tree.setCellEditor (editor);
28+
29+
tree.setFont (MaterialFonts.REGULAR);
30+
tree.setRowHeight (0);
31+
tree.setInvokesStopCellEditing (true);
32+
33+
MaterialTreeUI ui = (MaterialTreeUI) tree.getUI ();
34+
ui.setLeftChildIndent (10);
35+
ui.setRightChildIndent (10);
36+
}
37+
}

0 commit comments

Comments
 (0)