/* * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.swingset3.demos.button; import java.awt.Color; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.net.URISyntaxException; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import com.sun.swingset3.DemoProperties; import com.sun.swingset3.demos.JHyperlink; import java.lang.reflect.InvocationTargetException; /** * * @author aim */ @DemoProperties( value = "JButton Demo", category = "Controls", description = "Demonstrates the many uses of JButton, Swing's push button component.", sourceFiles = { "com/sun/swingset3/demos/button/ButtonDemo.java", "com/sun/swingset3/demos/JHyperlink.java", "com/sun/swingset3/demos/button/resources/ButtonDemo.html", "com/sun/swingset3/demos/button/resources/images/blogs.png", "com/sun/swingset3/demos/button/resources/images/ButtonDemo.gif", "com/sun/swingset3/demos/button/resources/images/document-print.png", "com/sun/swingset3/demos/button/resources/images/earth_day.gif", "com/sun/swingset3/demos/button/resources/images/earth_night.gif", "com/sun/swingset3/demos/button/resources/images/edit-find.png", "com/sun/swingset3/demos/button/resources/images/redbutton.png", "com/sun/swingset3/demos/button/resources/images/redbutton_dark.png", "com/sun/swingset3/demos/button/resources/images/redbutton_glow.png" } ) public final class ButtonDemo extends JPanel { public static final String DEMO_TITLE = ButtonDemo.class.getAnnotation(DemoProperties.class).value(); public static final String DO_IT_AGAIN = "Do it again"; public static final String DO_IT = "Do it"; public static final String BUTTON_WITH_TEXT_AND_IMAGE = "button with text and image"; public static final String BUTTON_WITH_BACKGROUND_COLOR = "button with background color"; public static final String GO = "Go"; public static final String FIND = "Find"; public static final String IMAGE_BUTTON = "image button"; public static final String SIMPLE_BUTTON = "simple button"; public static final String GET_MORE_INFO = "Get More Info"; public static final String JAVA_BLOGS_URL = "https://blogs.oracle.com/java/"; public static final String JAVA_SE_URL = "http://www.oracle.com/technetwork/java/javase/overview/index.html"; public static final String BUTTON_WITH_ROLLOVER_IMAGE = "button with rollover image"; public static final String BUTTON_WITH_NO_BORDER = "button with no border"; public static final String CONNECT = "Connect"; public ButtonDemo() { setToolTipText("Demonstrates JButton, Swing's push button component."); initComponents(); setOpaque(false); } protected void initComponents() { setLayout(new GridLayout(0, 1)); add(createSimpleButtonPanel()); add(createCreativeButtonPanel()); } protected JPanel createSimpleButtonPanel() { JPanel panel = new JPanel(); panel.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 8)); panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), "Simple Buttons")); //<snip>Create simple button final JButton simpleButton = new JButton(DO_IT); simpleButton.setToolTipText(SIMPLE_BUTTON); //</snip> //<snip>Add action listener using anonymous inner class // This style is useful when the action code is tied to a // single button instance and it's useful for simplicity // sake to keep the action code located near the button. // More global application actions should be implemented // using Action classes instead. simpleButton.addActionListener((ActionEvent event) -> { simpleButton.setText(DO_IT_AGAIN); // Need to force toplevel to relayout to accommodate new button size SwingUtilities.getWindowAncestor(simpleButton).validate(); }); //</snip> simpleButton.putClientProperty("snippetKey", "Create simple button"); panel.add(simpleButton); //<snip>Create image button // Image is from the Java Look and Feel Graphics Repository JButton button = new JButton(new ImageIcon(getClass(). getResource("resources/images/document-print.png"))); button.setToolTipText(IMAGE_BUTTON); //</snip> button.putClientProperty("snippetKey", "Create image button"); panel.add(button); //<snip>Create button with text and image // Image is from the Java Look and Feel Graphics Repository button = new JButton(FIND, new ImageIcon(getClass(). getResource("resources/images/edit-find.png"))); button.setToolTipText(BUTTON_WITH_TEXT_AND_IMAGE); button.setHorizontalTextPosition(JButton.LEADING); button.setIconTextGap(6); //</snip> button.putClientProperty("snippetKey", "Create button with text and image"); panel.add(button); //<snip>Create button with background color button = new JButton(GO); button.setBackground(Color.green); button.setContentAreaFilled(true); button.setOpaque(false); button.setToolTipText(BUTTON_WITH_BACKGROUND_COLOR); //</snip> button.putClientProperty("snippetKey", "Create button with background color"); panel.add(button); return panel; } protected JPanel createCreativeButtonPanel() { JPanel panel = new JPanel(); panel.setLayout(new FlowLayout(FlowLayout.CENTER, 16, 8)); panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), "More Interesting Buttons")); //<snip>Create button with no border JButton button = new JButton(); button.setText(CONNECT); button.setIcon(new ImageIcon(getClass().getResource("resources/images/earth_day.gif"))); button.setPressedIcon(new ImageIcon(getClass().getResource("resources/images/earth_night.gif"))); button.setBorderPainted(false); button.setContentAreaFilled(false); button.setVerticalTextPosition(JButton.BOTTOM); button.setHorizontalTextPosition(JButton.CENTER); button.setIconTextGap(0); button.setToolTipText(BUTTON_WITH_NO_BORDER); //</snip> button.putClientProperty("snippetKey", "Create button with no border"); panel.add(button); //<snip>Create image button with rollover image button = new JButton(); button.setBorderPainted(false); button.setContentAreaFilled(false); button.setIcon(new ImageIcon(getClass().getResource("resources/images/redbutton.png"))); button.setRolloverEnabled(true); button.setRolloverIcon(new ImageIcon(getClass().getResource("resources/images/redbutton_glow.png"))); button.setPressedIcon(new ImageIcon(getClass().getResource("resources/images/redbutton_dark.png"))); button.setToolTipText(BUTTON_WITH_ROLLOVER_IMAGE); //</snip> button.putClientProperty("snippetKey", "Create image button with rollover image"); panel.add(button); //<snip>Create HTML hyperlink JHyperlink hyperlink; try { hyperlink = new JHyperlink(GET_MORE_INFO, JAVA_SE_URL); } catch (URISyntaxException use) { use.printStackTrace(); hyperlink = new JHyperlink(GET_MORE_INFO); } //</snip> hyperlink.putClientProperty("snippetKey", "Create HTML hyperlink"); panel.add(hyperlink); //<snip>Create HTML image hyperlink try { hyperlink = new JHyperlink( new ImageIcon(getClass().getResource("resources/images/blogs.png")), JAVA_BLOGS_URL); } catch (URISyntaxException use) { use.printStackTrace(); } //</snip> button.putClientProperty("snippetKey", "Create HTML image hyperlink"); panel.add(hyperlink); return panel; } public static void main(String args[]) throws InterruptedException, InvocationTargetException { final ButtonDemo buttonDemo = new ButtonDemo(); javax.swing.SwingUtilities.invokeAndWait(() -> { JFrame frame = new JFrame(DEMO_TITLE); frame.add(buttonDemo); frame.pack(); frame.setVisible(true); }); } }