ButtonDemo.java revision 13978:1993af50385d
1/* 2 * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23package com.sun.swingset3.demos.button; 24 25import java.awt.Color; 26import java.awt.FlowLayout; 27import java.awt.GridLayout; 28import java.awt.event.ActionEvent; 29import java.net.URISyntaxException; 30import javax.swing.BorderFactory; 31import javax.swing.ImageIcon; 32import javax.swing.JButton; 33import javax.swing.JFrame; 34import javax.swing.JPanel; 35import javax.swing.SwingUtilities; 36 37import com.sun.swingset3.DemoProperties; 38import com.sun.swingset3.demos.JHyperlink; 39 40/** 41 * 42 * @author aim 43 */ 44@DemoProperties( 45 value = "JButton Demo", 46 category = "Controls", 47 description = "Demonstrates the many uses of JButton, Swing's push button component.", 48 sourceFiles = { 49 "com/sun/swingset3/demos/button/ButtonDemo.java", 50 "com/sun/swingset3/demos/JHyperlink.java", 51 "com/sun/swingset3/demos/button/resources/ButtonDemo.html", 52 "com/sun/swingset3/demos/button/resources/images/blogs.png", 53 "com/sun/swingset3/demos/button/resources/images/ButtonDemo.gif", 54 "com/sun/swingset3/demos/button/resources/images/document-print.png", 55 "com/sun/swingset3/demos/button/resources/images/earth_day.gif", 56 "com/sun/swingset3/demos/button/resources/images/earth_night.gif", 57 "com/sun/swingset3/demos/button/resources/images/edit-find.png", 58 "com/sun/swingset3/demos/button/resources/images/redbutton.png", 59 "com/sun/swingset3/demos/button/resources/images/redbutton_dark.png", 60 "com/sun/swingset3/demos/button/resources/images/redbutton_glow.png" 61 } 62) 63public final class ButtonDemo extends JPanel { 64 65 public static final String DEMO_TITLE = ButtonDemo.class.getAnnotation(DemoProperties.class).value(); 66 public static final String DO_IT_AGAIN = "Do it again"; 67 public static final String DO_IT = "Do it"; 68 public static final String BUTTON_WITH_TEXT_AND_IMAGE = "button with text and image"; 69 public static final String BUTTON_WITH_BACKGROUND_COLOR = "button with background color"; 70 public static final String GO = "Go"; 71 public static final String FIND = "Find"; 72 public static final String IMAGE_BUTTON = "image button"; 73 public static final String SIMPLE_BUTTON = "simple button"; 74 public static final String GET_MORE_INFO = "Get More Info"; 75 public static final String JAVA_BLOGS_URL = "https://blogs.oracle.com/java/"; 76 public static final String JAVA_SE_URL = "http://www.oracle.com/technetwork/java/javase/overview/index.html"; 77 public static final String BUTTON_WITH_ROLLOVER_IMAGE = "button with rollover image"; 78 public static final String BUTTON_WITH_NO_BORDER = "button with no border"; 79 public static final String CONNECT = "Connect"; 80 81 public ButtonDemo() { 82 setToolTipText("Demonstrates JButton, Swing's push button component."); 83 initComponents(); 84 setOpaque(false); 85 } 86 87 protected void initComponents() { 88 setLayout(new GridLayout(0, 1)); 89 90 add(createSimpleButtonPanel()); 91 add(createCreativeButtonPanel()); 92 } 93 94 protected JPanel createSimpleButtonPanel() { 95 JPanel panel = new JPanel(); 96 panel.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 8)); 97 panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), 98 "Simple Buttons")); 99 100 //<snip>Create simple button 101 final JButton simpleButton = new JButton(DO_IT); 102 simpleButton.setToolTipText(SIMPLE_BUTTON); 103 //</snip> 104 //<snip>Add action listener using anonymous inner class 105 // This style is useful when the action code is tied to a 106 // single button instance and it's useful for simplicity 107 // sake to keep the action code located near the button. 108 // More global application actions should be implemented 109 // using Action classes instead. 110 simpleButton.addActionListener((ActionEvent event) -> { 111 simpleButton.setText(DO_IT_AGAIN); 112 // Need to force toplevel to relayout to accommodate new button size 113 SwingUtilities.getWindowAncestor(simpleButton).validate(); 114 }); 115 //</snip> 116 simpleButton.putClientProperty("snippetKey", "Create simple button"); 117 panel.add(simpleButton); 118 119 //<snip>Create image button 120 // Image is from the Java Look and Feel Graphics Repository 121 JButton button = new JButton(new ImageIcon(getClass(). 122 getResource("resources/images/document-print.png"))); 123 button.setToolTipText(IMAGE_BUTTON); 124 //</snip> 125 button.putClientProperty("snippetKey", "Create image button"); 126 panel.add(button); 127 128 //<snip>Create button with text and image 129 // Image is from the Java Look and Feel Graphics Repository 130 button = new JButton(FIND, 131 new ImageIcon(getClass(). 132 getResource("resources/images/edit-find.png"))); 133 button.setToolTipText(BUTTON_WITH_TEXT_AND_IMAGE); 134 button.setHorizontalTextPosition(JButton.LEADING); 135 button.setIconTextGap(6); 136 //</snip> 137 button.putClientProperty("snippetKey", "Create button with text and image"); 138 panel.add(button); 139 140 //<snip>Create button with background color 141 button = new JButton(GO); 142 button.setBackground(Color.green); 143 button.setContentAreaFilled(true); 144 button.setOpaque(false); 145 button.setToolTipText(BUTTON_WITH_BACKGROUND_COLOR); 146 //</snip> 147 button.putClientProperty("snippetKey", "Create button with background color"); 148 panel.add(button); 149 150 return panel; 151 } 152 153 protected JPanel createCreativeButtonPanel() { 154 JPanel panel = new JPanel(); 155 panel.setLayout(new FlowLayout(FlowLayout.CENTER, 16, 8)); 156 panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), 157 "More Interesting Buttons")); 158 159 //<snip>Create button with no border 160 JButton button = new JButton(); 161 button.setText(CONNECT); 162 button.setIcon(new ImageIcon(getClass().getResource("resources/images/earth_day.gif"))); 163 button.setPressedIcon(new ImageIcon(getClass().getResource("resources/images/earth_night.gif"))); 164 button.setBorderPainted(false); 165 button.setContentAreaFilled(false); 166 button.setVerticalTextPosition(JButton.BOTTOM); 167 button.setHorizontalTextPosition(JButton.CENTER); 168 button.setIconTextGap(0); 169 button.setToolTipText(BUTTON_WITH_NO_BORDER); 170 //</snip> 171 button.putClientProperty("snippetKey", "Create button with no border"); 172 panel.add(button); 173 174 //<snip>Create image button with rollover image 175 button = new JButton(); 176 button.setBorderPainted(false); 177 button.setContentAreaFilled(false); 178 button.setIcon(new ImageIcon(getClass().getResource("resources/images/redbutton.png"))); 179 button.setRolloverEnabled(true); 180 button.setRolloverIcon(new ImageIcon(getClass().getResource("resources/images/redbutton_glow.png"))); 181 button.setPressedIcon(new ImageIcon(getClass().getResource("resources/images/redbutton_dark.png"))); 182 button.setToolTipText(BUTTON_WITH_ROLLOVER_IMAGE); 183 //</snip> 184 button.putClientProperty("snippetKey", "Create image button with rollover image"); 185 panel.add(button); 186 187 //<snip>Create HTML hyperlink 188 JHyperlink hyperlink; 189 try { 190 hyperlink = new JHyperlink(GET_MORE_INFO, JAVA_SE_URL); 191 } catch (URISyntaxException use) { 192 use.printStackTrace(); 193 hyperlink = new JHyperlink(GET_MORE_INFO); 194 } 195 //</snip> 196 hyperlink.putClientProperty("snippetKey", "Create HTML hyperlink"); 197 panel.add(hyperlink); 198 199 //<snip>Create HTML image hyperlink 200 try { 201 hyperlink = new JHyperlink( 202 new ImageIcon(getClass().getResource("resources/images/blogs.png")), JAVA_BLOGS_URL); 203 } catch (URISyntaxException use) { 204 use.printStackTrace(); 205 } 206 //</snip> 207 button.putClientProperty("snippetKey", "Create HTML image hyperlink"); 208 panel.add(hyperlink); 209 210 return panel; 211 } 212 213 public static void main(String args[]) { 214 final ButtonDemo buttonDemo = new ButtonDemo(); 215 216 javax.swing.SwingUtilities.invokeLater(() -> { 217 JFrame frame = new JFrame(DEMO_TITLE); 218 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 219 frame.add(buttonDemo); 220 frame.pack(); 221 frame.setVisible(true); 222 }); 223 } 224} 225