// Copyright 2011 Palantir Technologies // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.palantir.ptoss.cinch.example; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.lang.reflect.InvocationTargetException; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import com.google.common.base.Strings; public class IntroNoMVC { private final JPanel panel = new JPanel(); private final JTextField toField = new JTextField(); private final JTextField subjectField = new JTextField(); private final JTextArea bodyArea = new JTextArea(); private final JButton yellButton = new JButton("YELL!"); private final JButton sendButton = new JButton("Send"); private final JLabel messageLabel = new JLabel(""); public IntroNoMVC() { initializeInterface(); onUpdate(); } private void initializeInterface() { JPanel toPanel = new JPanel(new BorderLayout()); toPanel.add(new JLabel("To"), BorderLayout.NORTH); toPanel.add(toField, BorderLayout.CENTER); toPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 5, 0)); JPanel subjectPanel = new JPanel(new BorderLayout()); subjectPanel.add(new JLabel("Subject"), BorderLayout.NORTH); subjectPanel.add(subjectField, BorderLayout.CENTER); subjectPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 5, 0)); JPanel bodyPanel = new JPanel(new BorderLayout()); bodyPanel.add(new JLabel("Body"), BorderLayout.NORTH); bodyPanel.add(new JScrollPane(bodyArea), BorderLayout.CENTER); bodyPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 5, 0)); JPanel topPanel = new JPanel(new BorderLayout()); topPanel.add(toPanel, BorderLayout.NORTH); topPanel.add(subjectPanel, BorderLayout.SOUTH); JPanel bottomPanel = new JPanel(new BorderLayout()); bottomPanel.add(messageLabel, BorderLayout.WEST); JPanel buttonPanel = new JPanel(); buttonPanel.add(yellButton); buttonPanel.add(sendButton); bottomPanel.add(buttonPanel, BorderLayout.EAST); bodyArea.setPreferredSize(new Dimension(400, 200)); panel.setLayout(new BorderLayout()); panel.add(topPanel, BorderLayout.NORTH); panel.add(bodyPanel, BorderLayout.CENTER); panel.add(bottomPanel, BorderLayout.SOUTH); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); wireUi(); } private void wireUi() { sendButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String content = "[to=" + toField.getText() + ", subject=" + subjectField.getText() + ", body=" + bodyArea.getText() + "]"; System.out.println("Send " + content); } }); yellButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { bodyArea.setText(bodyArea.getText().toUpperCase()); } }); DocumentListener enableTracker = new DocumentListener() { public void changedUpdate(DocumentEvent e) { onUpdate(); } public void insertUpdate(DocumentEvent e) { onUpdate(); } public void removeUpdate(DocumentEvent e) { onUpdate(); } }; toField.getDocument().addDocumentListener(enableTracker); subjectField.getDocument().addDocumentListener(enableTracker); bodyArea.getDocument().addDocumentListener(enableTracker); } private void onUpdate() { sendButton.setEnabled(isReady()); messageLabel.setText(getCurrentMessage()); } public String getCurrentMessage() { if (Strings.isNullOrEmpty(toField.getText())) { return "Fill out 'To' field."; } if (Strings.isNullOrEmpty(subjectField.getText())) { return "Fill out 'Subject' field."; } if (Strings.isNullOrEmpty(bodyArea.getText())) { return "Fill out 'Body'."; } return "Ready to send."; } public boolean isReady() { return !Strings.isNullOrEmpty(toField.getText()) && !Strings.isNullOrEmpty(subjectField.getText()) && !Strings.isNullOrEmpty(bodyArea.getText()); } public JComponent getDisplayComponent() { return panel; } public static void main(String[] args) throws InterruptedException, InvocationTargetException { EventQueue.invokeAndWait(new Runnable() { public void run() { IntroNoMVC example = new IntroNoMVC(); JFrame frame = Examples.getFrameFor("No-MVC Email Example", example.panel); frame.pack(); frame.setVisible(true); } }); } }