import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.JEditorPane;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class AwtSwingTextComponents {
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private static void createAndShowGUI() {
        final Frame frame = new Frame("AwtSwingTextComponents");
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                frame.dispose();
            }
        });
        frame.setLayout(new BoxLayout(frame, BoxLayout.X_AXIS));

        // Create a panel with AWT text components.
        Panel awtCompsPanel = new Panel();
        awtCompsPanel.setLayout(new BoxLayout(awtCompsPanel, BoxLayout.Y_AXIS));
        frame.add(awtCompsPanel);

        Label awtCompsPanelHdrLbl = new Label("AWT Text Components:");
        Font hdrFont = new Font(Font.DIALOG, Font.BOLD, 14);
        awtCompsPanelHdrLbl.setFont(hdrFont);
        awtCompsPanel.add(createFlowLayoutPanelWithComp(
                awtCompsPanelHdrLbl, FlowLayout.LEFT));

        TextField textField = new TextField("TextField", 30);
        awtCompsPanel.add(createFlowLayoutPanelWithComp(textField));

        TextArea textArea = new TextArea("TextArea", 5, 30);
        awtCompsPanel.add(createFlowLayoutPanelWithComp(textArea));

        frame.add(Box.createHorizontalStrut(10));

        // Create a panel with Swing text components.
        JPanel swingCompsPanel = new JPanel();
        swingCompsPanel.setLayout(new BoxLayout(swingCompsPanel,
                BoxLayout.Y_AXIS));
        frame.add(swingCompsPanel);

        JLabel swingCompsPanelHdrLbl = new JLabel("Swing Text Components:");
        swingCompsPanelHdrLbl.setFont(hdrFont);
        swingCompsPanel.add(createFlowLayoutJPanelWithComp(
                swingCompsPanelHdrLbl, FlowLayout.LEFT));

        JTextField jTextField = new JTextField("JTextField", 25);
        swingCompsPanel.add(createFlowLayoutJPanelWithComp(jTextField));

        JTextArea jTextArea = new JTextArea("JTextArea", 5, 25);
        JScrollPane scrollerJTxtArea = new JScrollPane(jTextArea,
            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
            JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollerJTxtArea.setPreferredSize(jTextArea.getPreferredSize());
        swingCompsPanel.add(createFlowLayoutJPanelWithComp(scrollerJTxtArea,
                FlowLayout.LEFT));

        JEditorPane editorPane = new JEditorPane("text/plain",
            "JEditorPane JEditorPane\r\nJEditorPane JEditorPane\r\n");
        editorPane.setPreferredSize(new Dimension(300, 150));
        JScrollPane scrollerEditorPane = new JScrollPane(editorPane,
            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
            JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollerEditorPane.setPreferredSize(editorPane.getPreferredSize());
        swingCompsPanel.add(createFlowLayoutJPanelWithComp(scrollerEditorPane,
                FlowLayout.LEFT));

        frame.pack();
        frame.setResizable(false);
        frame.setVisible(true);
    }

    private static Panel createFlowLayoutPanelWithComp(Component comp) {
        return createFlowLayoutPanelWithComp(comp, FlowLayout.CENTER);
    }

    private static Panel createFlowLayoutPanelWithComp(Component comp,
        int allign) {
        Panel panel = new Panel(new FlowLayout(allign));
        if (comp != null) {
            panel.add(comp);
        }
        return panel;
    }

    private static JPanel createFlowLayoutJPanelWithComp(JComponent comp) {
        return createFlowLayoutJPanelWithComp(comp, FlowLayout.CENTER);
    }

    private static JPanel createFlowLayoutJPanelWithComp(JComponent comp,
        int allign) {
        JPanel panel = new JPanel(new FlowLayout(allign));
        if (comp != null) {
            panel.add(comp);
        }
        return panel;
    }
}
