| /* |
| * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * |
| * - Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * |
| * - Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * - Neither the name of Oracle nor the names of its |
| * contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS |
| * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
| * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
| * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| /* |
| * This source code is provided to illustrate the usage of a given feature |
| * or technique and has been deliberately simplified. Additional steps |
| * required for a production-quality application, such as security checks, |
| * input validation and proper error handling, might not be present in |
| * this sample code. |
| */ |
| |
| |
| |
| import java.awt.BorderLayout; |
| import java.awt.Component; |
| import java.awt.Container; |
| import java.awt.Dimension; |
| import java.awt.FlowLayout; |
| import java.awt.GridLayout; |
| import java.awt.Insets; |
| import java.awt.LayoutManager; |
| import java.awt.event.ActionEvent; |
| import java.awt.event.ActionListener; |
| import javax.swing.ButtonGroup; |
| import javax.swing.JButton; |
| import javax.swing.JCheckBox; |
| import javax.swing.JComboBox; |
| import javax.swing.JDialog; |
| import javax.swing.JFrame; |
| import javax.swing.JLabel; |
| import javax.swing.JPanel; |
| import javax.swing.JRadioButton; |
| import javax.swing.JTabbedPane; |
| import javax.swing.UIManager; |
| import javax.swing.border.TitledBorder; |
| |
| |
| /** |
| * This is dialog which allows users to choose preferences |
| * |
| * @author Steve Wilson |
| * @author Alexander Kouznetsov |
| */ |
| @SuppressWarnings("serial") |
| public final class MetalworksPrefs extends JDialog { |
| |
| public MetalworksPrefs(JFrame f) { |
| super(f, "Preferences", true); |
| JPanel container = new JPanel(); |
| container.setLayout(new BorderLayout()); |
| |
| JTabbedPane tabs = new JTabbedPane(); |
| JPanel filters = buildFilterPanel(); |
| JPanel conn = buildConnectingPanel(); |
| tabs.addTab("Filters", null, filters); |
| tabs.addTab("Connecting", null, conn); |
| |
| |
| JPanel buttonPanel = new JPanel(); |
| buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT)); |
| JButton cancel = new JButton("Cancel"); |
| cancel.addActionListener(new ActionListener() { |
| |
| public void actionPerformed(ActionEvent e) { |
| CancelPressed(); |
| } |
| }); |
| buttonPanel.add(cancel); |
| JButton ok = new JButton("OK"); |
| ok.addActionListener(new ActionListener() { |
| |
| public void actionPerformed(ActionEvent e) { |
| OKPressed(); |
| } |
| }); |
| buttonPanel.add(ok); |
| getRootPane().setDefaultButton(ok); |
| |
| container.add(tabs, BorderLayout.CENTER); |
| container.add(buttonPanel, BorderLayout.SOUTH); |
| getContentPane().add(container); |
| pack(); |
| centerDialog(); |
| UIManager.addPropertyChangeListener(new UISwitchListener(container)); |
| } |
| |
| public JPanel buildFilterPanel() { |
| JPanel filters = new JPanel(); |
| filters.setLayout(new GridLayout(1, 0)); |
| |
| JPanel spamPanel = new JPanel(); |
| |
| spamPanel.setLayout(new ColumnLayout()); |
| spamPanel.setBorder(new TitledBorder("Spam")); |
| ButtonGroup spamGroup = new ButtonGroup(); |
| JRadioButton file = new JRadioButton("File in Spam Folder"); |
| JRadioButton delete = new JRadioButton("Auto Delete"); |
| JRadioButton bomb = new JRadioButton("Reverse Mail-Bomb"); |
| spamGroup.add(file); |
| spamGroup.add(delete); |
| spamGroup.add(bomb); |
| spamPanel.add(file); |
| spamPanel.add(delete); |
| spamPanel.add(bomb); |
| file.setSelected(true); |
| filters.add(spamPanel); |
| |
| JPanel autoRespond = new JPanel(); |
| autoRespond.setLayout(new ColumnLayout()); |
| autoRespond.setBorder(new TitledBorder("Auto Response")); |
| |
| ButtonGroup respondGroup = new ButtonGroup(); |
| JRadioButton none = new JRadioButton("None"); |
| JRadioButton vaca = new JRadioButton("Send Vacation Message"); |
| JRadioButton thx = new JRadioButton("Send Thank You Message"); |
| |
| respondGroup.add(none); |
| respondGroup.add(vaca); |
| respondGroup.add(thx); |
| |
| autoRespond.add(none); |
| autoRespond.add(vaca); |
| autoRespond.add(thx); |
| |
| none.setSelected(true); |
| filters.add(autoRespond); |
| |
| return filters; |
| } |
| |
| public JPanel buildConnectingPanel() { |
| JPanel connectPanel = new JPanel(); |
| connectPanel.setLayout(new ColumnLayout()); |
| |
| JPanel protoPanel = new JPanel(); |
| JLabel protoLabel = new JLabel("Protocol"); |
| JComboBox protocol = new JComboBox(); |
| protocol.addItem("SMTP"); |
| protocol.addItem("IMAP"); |
| protocol.addItem("Other..."); |
| protoPanel.add(protoLabel); |
| protoPanel.add(protocol); |
| |
| JPanel attachmentPanel = new JPanel(); |
| JLabel attachmentLabel = new JLabel("Attachments"); |
| JComboBox attach = new JComboBox(); |
| attach.addItem("Download Always"); |
| attach.addItem("Ask size > 1 Meg"); |
| attach.addItem("Ask size > 5 Meg"); |
| attach.addItem("Ask Always"); |
| attachmentPanel.add(attachmentLabel); |
| attachmentPanel.add(attach); |
| |
| JCheckBox autoConn = new JCheckBox("Auto Connect"); |
| JCheckBox compress = new JCheckBox("Use Compression"); |
| autoConn.setSelected(true); |
| |
| connectPanel.add(protoPanel); |
| connectPanel.add(attachmentPanel); |
| connectPanel.add(autoConn); |
| connectPanel.add(compress); |
| return connectPanel; |
| } |
| |
| protected void centerDialog() { |
| Dimension screenSize = this.getToolkit().getScreenSize(); |
| Dimension size = this.getSize(); |
| screenSize.height = screenSize.height / 2; |
| screenSize.width = screenSize.width / 2; |
| size.height = size.height / 2; |
| size.width = size.width / 2; |
| int y = screenSize.height - size.height; |
| int x = screenSize.width - size.width; |
| this.setLocation(x, y); |
| } |
| |
| public void CancelPressed() { |
| this.setVisible(false); |
| } |
| |
| public void OKPressed() { |
| this.setVisible(false); |
| } |
| } |
| |
| |
| class ColumnLayout implements LayoutManager { |
| |
| int xInset = 5; |
| int yInset = 5; |
| int yGap = 2; |
| |
| public void addLayoutComponent(String s, Component c) { |
| } |
| |
| public void layoutContainer(Container c) { |
| Insets insets = c.getInsets(); |
| int height = yInset + insets.top; |
| |
| Component[] children = c.getComponents(); |
| Dimension compSize = null; |
| for (Component child : children) { |
| compSize = child.getPreferredSize(); |
| child.setSize(compSize.width, compSize.height); |
| child.setLocation(xInset + insets.left, height); |
| height += compSize.height + yGap; |
| } |
| |
| } |
| |
| public Dimension minimumLayoutSize(Container c) { |
| Insets insets = c.getInsets(); |
| int height = yInset + insets.top; |
| int width = 0 + insets.left + insets.right; |
| |
| Component[] children = c.getComponents(); |
| Dimension compSize = null; |
| for (Component child : children) { |
| compSize = child.getPreferredSize(); |
| height += compSize.height + yGap; |
| width = Math.max(width, compSize.width + insets.left + insets.right + xInset |
| * 2); |
| } |
| height += insets.bottom; |
| return new Dimension(width, height); |
| } |
| |
| public Dimension preferredLayoutSize(Container c) { |
| return minimumLayoutSize(c); |
| } |
| |
| public void removeLayoutComponent(Component c) { |
| } |
| } |