From 073cf038a410cb4a75ad34527a1b7a2345177da5 Mon Sep 17 00:00:00 2001 From: Niclas Thobaben Date: Thu, 21 Jun 2018 14:41:31 +0200 Subject: [PATCH] implemented ObjTreeCellRender & ObjListCellRenderer --- src/nt/UI/NtUIHelper.java | 4 +- src/nt/UI/control/JSearchBar.java | 9 -- src/nt/UI/control/JSearchBarController.java | 13 --- src/nt/UI/control/JSearchTextField.java | 24 +++--- src/nt/UI/directory_icn.png | Bin 0 -> 539 bytes src/nt/UI/display/ObjListCellRenderer.java | 88 ++++++++++++++++++++ src/nt/UI/display/ObjTreeCellRenderer.java | 69 +++++++++++++++ src/nt/UI/file_icn.png | Bin 0 -> 205 bytes src/nt/UI/number_icn.png | Bin 0 -> 1942 bytes src/nt/UI/object_icn.png | Bin 0 -> 592 bytes src/nt/UI/string_icn.png | Bin 0 -> 2056 bytes src/nt/UI/submodule_icn.png | Bin 0 -> 690 bytes src/nt/UI/tests/UITestMain.java | 58 ++++++++----- src/nt/UI/util/DocumentAdapter.java | 29 ------- src/nt/UI/util/IconResizer.java | 31 +++++++ src/nt/UI/util/Icons.java | 22 +++++ 16 files changed, 260 insertions(+), 87 deletions(-) create mode 100644 src/nt/UI/directory_icn.png create mode 100644 src/nt/UI/display/ObjListCellRenderer.java create mode 100644 src/nt/UI/display/ObjTreeCellRenderer.java create mode 100644 src/nt/UI/file_icn.png create mode 100644 src/nt/UI/number_icn.png create mode 100644 src/nt/UI/object_icn.png create mode 100644 src/nt/UI/string_icn.png create mode 100644 src/nt/UI/submodule_icn.png delete mode 100644 src/nt/UI/util/DocumentAdapter.java create mode 100644 src/nt/UI/util/IconResizer.java create mode 100644 src/nt/UI/util/Icons.java diff --git a/src/nt/UI/NtUIHelper.java b/src/nt/UI/NtUIHelper.java index 1b1617e..e0c8bf8 100644 --- a/src/nt/UI/NtUIHelper.java +++ b/src/nt/UI/NtUIHelper.java @@ -2,15 +2,13 @@ package nt.UI; import java.awt.Font; import java.awt.FontFormatException; -import java.io.File; import java.io.IOException; -import java.net.URL; public class NtUIHelper { public static Font getSymbolFont() { try { - return Font.createFont(Font.TYPE1_FONT, NtUIHelper.class.getResourceAsStream("/nt/UI/LigatureSymbols-2.11.ttf")); + return Font.createFont(Font.TRUETYPE_FONT, NtUIHelper.class.getResourceAsStream("/nt/UI/LigatureSymbols-2.11.ttf")); } catch (FontFormatException | IOException e) { e.printStackTrace(); } diff --git a/src/nt/UI/control/JSearchBar.java b/src/nt/UI/control/JSearchBar.java index dc2573e..164cb61 100644 --- a/src/nt/UI/control/JSearchBar.java +++ b/src/nt/UI/control/JSearchBar.java @@ -2,22 +2,13 @@ package nt.UI.control; import java.awt.Dimension; import java.awt.Font; -import java.awt.FontFormatException; -import java.awt.TextField; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; import java.io.File; -import java.io.IOException; import javax.swing.DefaultListModel; -import javax.swing.JFrame; import javax.swing.JList; -import javax.swing.JMenuItem; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JWindow; -import javax.swing.SwingUtilities; import nt.UI.control.interfaces.SearchBarFinder; diff --git a/src/nt/UI/control/JSearchBarController.java b/src/nt/UI/control/JSearchBarController.java index 97388d8..94329d7 100644 --- a/src/nt/UI/control/JSearchBarController.java +++ b/src/nt/UI/control/JSearchBarController.java @@ -3,46 +3,33 @@ package nt.UI.control; import java.awt.Font; import java.awt.Window; import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.HierarchyBoundsListener; import java.awt.event.HierarchyEvent; -import java.awt.event.InputEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.awt.event.WindowEvent; -import java.awt.event.WindowListener; import javax.swing.AbstractAction; import javax.swing.ActionMap; import javax.swing.InputMap; import javax.swing.JList; -import javax.swing.JMenuItem; import javax.swing.JTextField; import javax.swing.KeyStroke; import javax.swing.SwingUtilities; -import javax.swing.event.AncestorEvent; -import javax.swing.event.AncestorListener; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; -import nt.UI.util.DocumentAdapter; public class JSearchBarController extends KeyAdapter implements DocumentListener, FocusListener, ComponentListener, HierarchyBoundsListener, ListSelectionListener{ private static final String COMPLETION_CANCEL_KEY = "comp.cancel"; - private static final String SELECT_KEY = "comp.select"; private static final KeyStroke COMPLETION_CANCEL_STROKE = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); - private static final KeyStroke SELECT_STROKE = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0); private JSearchBar searchBar; diff --git a/src/nt/UI/control/JSearchTextField.java b/src/nt/UI/control/JSearchTextField.java index 11221c6..159be91 100644 --- a/src/nt/UI/control/JSearchTextField.java +++ b/src/nt/UI/control/JSearchTextField.java @@ -1,25 +1,21 @@ package nt.UI.control; -import javax.swing.JPanel; -import javax.swing.JTextField; -import javax.swing.border.EmptyBorder; -import javax.swing.border.LineBorder; -import javax.swing.text.JTextComponent; - -import nt.UI.NtUIHelper; - import java.awt.Color; import java.awt.Component; import java.awt.Font; import java.awt.event.ActionListener; -import javax.swing.BoxLayout; -import javax.swing.JLabel; -import javax.swing.JButton; -import javax.swing.BorderFactory; import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; +import javax.swing.border.EmptyBorder; +import javax.swing.border.LineBorder; + +import nt.UI.NtUIHelper; public class JSearchTextField extends JPanel{ @@ -35,7 +31,7 @@ public class JSearchTextField extends JPanel{ super(); setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); - Font symbols = NtUIHelper.getSymbolFont(); + Font symbols = NtUIHelper.getSymbolFont().deriveFont(18f); horizontalStrut_1 = Box.createHorizontalStrut(20); add(horizontalStrut_1); diff --git a/src/nt/UI/directory_icn.png b/src/nt/UI/directory_icn.png new file mode 100644 index 0000000000000000000000000000000000000000..e1437ca5a47749aa1cd972f4ddea68a1d893b7cd GIT binary patch literal 539 zcmeAS@N?(olHy`uVBq!ia0vp^-azcY!3HFQI=eK16icy_X9x!n)NrJ90QsB+9+AZi z4F2LE%xJM8zXm8MS>hT|5}cn_Ql40p%1~Zju9umYU7Va)kgAtols@~NjT8d|;|xz1 z$B>FSZ|~T8F$YStJ}hrz6g(1Cz?yWy?I3GJROE^jZM_4mFN7ZXKb8vO2%8kj@yK6Y z%&q%KlF^EXUPU}R%h}E`$4{KCbbpVcfiK&>Tn6z2$_70a@&{}SICCyCYmIL%`BN6$zUmok#GKcn=O1)^X*`ymzb^cbzvYJ6RhQ^xy2MAM`G&$6eak4Q{oO4og0 zaOrtFPow$*_sY%xUi11_#5E?@{b35$ztZxOA=0cWaq?E#>?-p<)4k@$g?`upwKE+T zvY2*YBTJuZflgyGC&)zV2~BuhAK{ZdA=s|ukXrS*#=KX$Qj2B>+HF|QuA>sS?A)&d zWnUk4RN3rU-uIbLrssM#{ + + private HashMap, Icon> mappedIcons = new HashMap<>(); + private Color bgEven = new Color(Integer.decode("#e8e8e8")); + private Color bgOdd = Color.WHITE; + private Color bgSelect = new Color(Integer.decode("#5e87ed")); + + public ObjListCellRenderer() { + putIcon(String.class, Icons.STRING_SYMBOL_URL); + putIcon(Long.class, Icons.NUMBER_SYMBOL_URL); + putIcon(Integer.class, Icons.NUMBER_SYMBOL_URL); + putIcon(Short.class, Icons.NUMBER_SYMBOL_URL); + putIcon(Float.class, Icons.NUMBER_SYMBOL_URL); + putIcon(Double.class, Icons.NUMBER_SYMBOL_URL); + putIcon(Object.class, Icons.OBJECT_SYMBOL_URL); + } + + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, + boolean isSelected, boolean cellHasFocus) { + if(value == null) { + return null; + } + Icon icon = mappedIcons.get(value.getClass()); + icon = icon==null? new ImageIcon(Icons.FILE_SYMBOL_URL): icon; + + int fHeight = list.getFontMetrics(list.getFont()).getHeight() - 4; + int iWidth = (int)((fHeight / (float)icon.getIconHeight()) * icon.getIconWidth()); + icon = IconResizer.resizeIcon(icon, iWidth, fHeight); + + + JLabel label = new JLabel(value.toString()); + label.setIconTextGap(10); + label.setFont(list.getFont()); + label.setOpaque(true); + label.setIcon(icon); + Color bg = (index % 2)==0?bgEven:bgOdd; + bg = isSelected? bgSelect : bg; + Color fg = isSelected? list.getSelectionForeground() : list.getForeground(); + label.setBackground(bg); + label.setForeground(fg); + return label; + } + + public void putIcon(Class clazz, Icon icon) { + this.mappedIcons.put(clazz, icon); + } + public void putIcon(Class clazz, URL url) { + putIcon(clazz, new ImageIcon(url)); + } + + public Color getBackgroundEven() { + return this.bgEven; + } + public void setBackgroundEven(Color bg) { + this.bgEven = bg; + } + public Color getBackgroundOdd() { + return this.bgOdd; + } + public void setBackgroundOdd(Color bg) { + this.bgOdd = bg; + } +} diff --git a/src/nt/UI/display/ObjTreeCellRenderer.java b/src/nt/UI/display/ObjTreeCellRenderer.java new file mode 100644 index 0000000..a041560 --- /dev/null +++ b/src/nt/UI/display/ObjTreeCellRenderer.java @@ -0,0 +1,69 @@ +package nt.UI.display; + +import java.awt.Color; +import java.awt.Component; +import java.net.URL; +import java.util.HashMap; + +import javax.swing.Icon; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JTree; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.TreeCellRenderer; + +import nt.UI.util.IconResizer; +import nt.UI.util.Icons; + +public class ObjTreeCellRenderer implements TreeCellRenderer{ + + private HashMap, Icon> mappedIcons = new HashMap<>(); + private Color bgSelect = new Color(Integer.decode("#5e87ed")); + + public ObjTreeCellRenderer() { + putIcon(String.class, Icons.STRING_SYMBOL_URL); + putIcon(Long.class, Icons.NUMBER_SYMBOL_URL); + putIcon(Integer.class, Icons.NUMBER_SYMBOL_URL); + putIcon(Short.class, Icons.NUMBER_SYMBOL_URL); + putIcon(Float.class, Icons.NUMBER_SYMBOL_URL); + putIcon(Double.class, Icons.NUMBER_SYMBOL_URL); + putIcon(Object.class, Icons.OBJECT_SYMBOL_URL); + } + + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, + boolean leaf, int row, boolean hasFocus) { + if(value == null) { + return null; + } + Class valClass = value.getClass(); + valClass = valClass==DefaultMutableTreeNode.class? ((DefaultMutableTreeNode)value).getUserObject().getClass() : valClass; + Icon icon = leaf?mappedIcons.get(valClass) : expanded? new ImageIcon(Icons.DIRECTORY_SYMBOL_URL) : new ImageIcon(Icons.SUBMODULE_SYMBOL_URL); + icon = icon==null? new ImageIcon(Icons.FILE_SYMBOL_URL): icon; + + int fHeight = tree.getFontMetrics(tree.getFont()).getHeight() - 4; + int iWidth = (int)((fHeight / (float)icon.getIconHeight()) * icon.getIconWidth()); + icon = IconResizer.resizeIcon(icon, iWidth, fHeight); + + JLabel label = new JLabel(value.toString()); + label.setIconTextGap(10); + label.setFont(tree.getFont()); + label.setOpaque(true); + label.setIcon(icon); + Color bg = selected? bgSelect : tree.getBackground(); + Color fg = tree.getForeground(); + label.setBackground(bg); + label.setForeground(fg); + + + return label; + } + + public void putIcon(Class clazz, Icon icon) { + this.mappedIcons.put(clazz, icon); + } + public void putIcon(Class clazz, URL url) { + putIcon(clazz, new ImageIcon(url)); + } + +} diff --git a/src/nt/UI/file_icn.png b/src/nt/UI/file_icn.png new file mode 100644 index 0000000000000000000000000000000000000000..dd89a055a8a8d027ca44367058652711d92d3421 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CH!3HFy_x^nYq*#ibJVQ8upoSx*1IXtr@Q5r1 zsyPC}j8nDwq=ABxC9V-A!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NC6djdAc}; zXiR*2aU*Agg8<8chZ_Zcs`8M)&Kwi8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H12NOv|K~!jg?VHq*#+29Gk|LVW&p4NxCTjskSR5Q2MqvHE?toWcdY>c z>IOK|0G+QUU9A<2U}ugs6%1yx`N{e7=cBb&q?8hgMAPltw+CMJO{^~f{7_4Mf?sHG zaPVjD9n0(W{t6%`?%S*MWwl^TEx*FslE>ruY;<(=4*>ZRm%j(_RW;QVbUK-%n<;pfZ9Iyiz3OosT52m(^55U_4oIG8VZGm9S+ACj^o5P={kVDirzV|*DC<&?d@Gc=@=0J zu(h?d$Z?#CZ##DE*q&^L({+^crO9Hkd~)T=6`$Cy z7+f-$Tmm2%Qhj}W)FI~c`2=%bqtX1sFw6&1+HY%XT%*e=y zfuHZ|>w5~y9IaJ~!A(p|up(1lr_&v#6iH7{PYbTQT&{#t{Q(q&^Z9(u{QUm?`2!*JAX!oj&hPgd`FV%K@r>rbwzjq=w)OV*s+H;wpd4H}5{Y#2 z4Q{u4lU5)c4kyL7&dyFlDPO6oDMCpmld~He8>?b_EEao_%jG`j+t$|BvQM5o`KeSr z>2!Mg)~#FO{fvu5BC|%L@n1rSU{UGl=xA4~)gRZ=*VmPzx&xw@DwXQF*#B*$@$vCr zDjh1_xN&1hT(0V2nakytS(a^+^6SY}cXu~+ODU(S;nvsJsS89srPu2_rIf3B&Sf$g z?!tu&6Q!=*zkmP3&CSjC3i;O7*2KAU=jIFfY&Od!5{cKb-`w1sDjJPi_;nmQbZDxl zr)LWQT3T9&R;%3u06LxSB_X80dL*G_AIf%gbj%DvT zt}zVLcyQ5Zv?yRUo6YZ)@+~MB3<_3Vi^Z}6(G!Idk_{IQhsDoioL;Y|-G%(*{N7U}HloNsS$SF6=(rnR;8b)OC#IM5}or&dWG z=NB(t9Ojp`TCI<0{^@l3Z*hBmzyG&t+oMVG*fJ0ZwDa?Bx4S4>;cInuH72$lJ$kfN zP9JEJ1NR~tjUM3}TrL;&^lEx~dP{6G7z|}Me7TYgx4pf+z;T>l^F4Ly6!r8f5C{n7 z;=X7sy` zuXsFO6j0YIU@k~192X9U1tFQo<0)DR`I?)X`&Vo;nM}q~zDh|FTt1&)Nu^SPXEKMw zK`k>rJ}!t82_c!5mX^B4tdij3@p#dZdQVRe^>we$=hN`>X0v$_fL2QT)k+fF;^Jb_ z5HuQ%)YrY@Xy(kBGeyyg(vtM4hSh34o6qMr!TVg05YkO4g4x;GBOJ#i-nbLDl(uV; zk07*qoM6N<$f@USW$N&HU literal 0 HcmV?d00001 diff --git a/src/nt/UI/object_icn.png b/src/nt/UI/object_icn.png new file mode 100644 index 0000000000000000000000000000000000000000..1e377fc896b118eb43b8df3ed317c695ae257c9e GIT binary patch literal 592 zcmeAS@N?(olHy`uVBq!ia0vp^=0NPg!3HGv{dsQ>q*#ibJVQ8upoSx*1IXtr@Q5sC zU~pay!i<-T&RqivN|v}rlmzFem6RtIr81P4m+NKbWfvzW7NqLs7p2dBXCuYHzY|$LGcH3{$+d1kErf2>xn-{P& zsInloT;%Dd+~0f!>FK|t(j60LC(b(*AF3hpZT8t^yftTb)-cau-`PLWq9I0aJ4b~t z!-9<#5waO3d^QQIuST)#`S5$qM~j9Wv)vpOt^5HjK;gv~cc`-j@bD?jKQF)K_FJ}p z2Tna{(~xmcn|$+iiB;YD7plSzg%%8_H+^enaDDVZ`o;IIIHu5zU=cBf(~AlpFz&wl z?#K2QA&&|fUY7jY5Ta#!{@s6W83(0_KQ?~PFZdiZ=Zc8B=}}ML!k}PcnYwH|Gk?6U z-5cls?f2i~FWjQ^Zf~1x9DSH~0s9*lgY&yy=Q3>%^xwEF@1XUHFCJfxN7fbFGDIh* t%Di9W!!IFWaK|W{Vb25EtXoV!ST3#mQd!_EeFGT#44$rjF6*2UngH9(^`HO% literal 0 HcmV?d00001 diff --git a/src/nt/UI/string_icn.png b/src/nt/UI/string_icn.png new file mode 100644 index 0000000000000000000000000000000000000000..6e474967f2903f89fc373ddd7e1649c82ee72bec GIT binary patch literal 2056 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 literal 0 HcmV?d00001 diff --git a/src/nt/UI/tests/UITestMain.java b/src/nt/UI/tests/UITestMain.java index a429dab..5c777a7 100644 --- a/src/nt/UI/tests/UITestMain.java +++ b/src/nt/UI/tests/UITestMain.java @@ -1,26 +1,28 @@ package nt.UI.tests; -import javax.swing.JFrame; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; -import javax.swing.plaf.metal.MetalLookAndFeel; - -import nt.UI.NtUIHelper; -import nt.UI.control.JSearchBar; -import nt.UI.control.JSearchTextField; -import nt.UI.control.interfaces.SearchBarFinder; -import javax.swing.BoxLayout; -import java.awt.Component; import java.util.Arrays; import java.util.LinkedList; import java.util.List; -import javax.swing.Box; +import javax.swing.BoxLayout; import javax.swing.JButton; -import javax.swing.JTextField; +import javax.swing.JFrame; +import javax.swing.JScrollPane; +import javax.swing.JTree; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; +import javax.swing.plaf.metal.MetalLookAndFeel; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeModel; + +import nt.UI.NtUIHelper; +import nt.UI.control.JSearchBar; +import nt.UI.control.interfaces.SearchBarFinder; +import nt.UI.display.ObjTreeCellRenderer; public class UITestMain extends JFrame{ + private static final long serialVersionUID = 1L; private static final boolean DEBUG_LAF = false; public static void main(String[] args) { @@ -57,17 +59,35 @@ public class UITestMain extends JFrame{ return results.toArray(new String[0]); } })); + + DefaultTreeModel model = new DefaultTreeModel(new DefaultMutableTreeNode("root")); + ((DefaultMutableTreeNode)model.getRoot()).add(new DefaultMutableTreeNode("Hello")); + ((DefaultMutableTreeNode)model.getRoot()).add(new DefaultMutableTreeNode("There")); + ((DefaultMutableTreeNode)model.getRoot()).add(new DefaultMutableTreeNode(new Object())); + ((DefaultMutableTreeNode)model.getRoot()).add(new DefaultMutableTreeNode(1222)); + ((DefaultMutableTreeNode)model.getRoot()).add(new DefaultMutableTreeNode(12222222222L)); + ((DefaultMutableTreeNode)model.getRoot()).add(new DefaultMutableTreeNode(12.232)); + ((DefaultMutableTreeNode)model.getRoot()).add(new DefaultMutableTreeNode(12.4444f)); + ((DefaultMutableTreeNode)model.getRoot()).add(new DefaultMutableTreeNode(new TestFolder())); - Component verticalStrut = Box.createVerticalStrut(300); - getContentPane().add(verticalStrut); + JScrollPane scrollPane = new JScrollPane(); + getContentPane().add(scrollPane); + JTree tree = new JTree(model); + scrollPane.setViewportView(tree); + tree.setCellRenderer(new ObjTreeCellRenderer()); JButton btnBtn = new JButton("btn"); getContentPane().add(btnBtn); - JSearchTextField searchTextField = new JSearchTextField(); - getContentPane().add(searchTextField); - - searchTextField.requestFocus(); } + public class TestFolder { + @Override + public String toString() { + return "Category"; + } + } + + + } diff --git a/src/nt/UI/util/DocumentAdapter.java b/src/nt/UI/util/DocumentAdapter.java deleted file mode 100644 index 662d512..0000000 --- a/src/nt/UI/util/DocumentAdapter.java +++ /dev/null @@ -1,29 +0,0 @@ -package nt.UI.util; - -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; - -public abstract class DocumentAdapter implements DocumentListener{ - - public enum DEType { - INSERT, REMOVE, CHANGE - }; - - @Override - public void insertUpdate(DocumentEvent e) { - documentChanged(e, DEType.INSERT); - } - - @Override - public void removeUpdate(DocumentEvent e) { - documentChanged(e, DEType.REMOVE); - } - - @Override - public void changedUpdate(DocumentEvent e) { - documentChanged(e, DEType.CHANGE); - } - - public abstract void documentChanged(DocumentEvent e, DEType type); - -} diff --git a/src/nt/UI/util/IconResizer.java b/src/nt/UI/util/IconResizer.java new file mode 100644 index 0000000..45e4f18 --- /dev/null +++ b/src/nt/UI/util/IconResizer.java @@ -0,0 +1,31 @@ +package nt.UI.util; + +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; + +import javax.swing.Icon; +import javax.swing.ImageIcon; + +public class IconResizer { + + public static Icon resizeIcon(Icon icon, int width, int height) { + Icon newIcon = null; + if(icon != null && ImageIcon.class.isInstance(icon) + && (icon.getIconHeight() != height && icon.getIconWidth() != width)) { + Image img = ((ImageIcon)icon).getImage(); + BufferedImage bImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + Graphics2D g2d = bImg.createGraphics(); + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); + g2d.drawImage(img, 0, 0, width, height, null, null); + g2d.dispose(); + newIcon = new ImageIcon(bImg); + }else { + newIcon = icon; + } + return newIcon; + } + +} diff --git a/src/nt/UI/util/Icons.java b/src/nt/UI/util/Icons.java new file mode 100644 index 0000000..15cb153 --- /dev/null +++ b/src/nt/UI/util/Icons.java @@ -0,0 +1,22 @@ +package nt.UI.util; + +import java.net.URL; + +import javax.swing.Icon; +import javax.swing.ImageIcon; + + +public class Icons { + + public static final URL FILE_SYMBOL_URL = Icons.class.getResource("/nt/UI/file_icn.png"); + public static final URL DIRECTORY_SYMBOL_URL = Icons.class.getResource("/nt/UI/directory_icn.png"); + public static final URL STRING_SYMBOL_URL = Icons.class.getResource("/nt/UI/string_icn.png"); + public static final URL NUMBER_SYMBOL_URL = Icons.class.getResource("/nt/UI/number_icn.png"); + public static final URL OBJECT_SYMBOL_URL = Icons.class.getResource("/nt/UI/object_icn.png"); + public static final URL SUBMODULE_SYMBOL_URL = Icons.class.getResource("/nt/UI/submodule_icn.png"); + + public static Icon getIcon(URL icn) { + return new ImageIcon(icn); + } + +}