Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

import java.awt.Component;
import java.awt.Dimension;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Main extends Box {
    Box container;
    Dimension minSize = new Dimension(400, 300);

    public Main(int axis) {
        super(BoxLayout.Y_AXIS);
        container = new Box(axis);
        container.setAlignmentX(Box.LEFT_ALIGNMENT);
        add(container);

        JTextArea text = new JTextArea();
        container.add(new JScrollPane(text));

        JButton split = new JButton("Split");
        split.setAlignmentX(Box.LEFT_ALIGNMENT);
        split.addActionListener(e -> {
            JTextArea t = new JTextArea();
            container.add(new JScrollPane(t));
            revalidate();
        });
        add(split);

        JButton axisChanger = new JButton("Change Axis");
        axisChanger.setAlignmentX(Box.LEFT_ALIGNMENT);
        axisChanger.addActionListener(e -> {
            Box newContainer;
            if (((BoxLayout) container.getLayout()).getAxis() == BoxLayout.X_AXIS) {
                newContainer = Box.createVerticalBox();
            } else {
                newContainer = Box.createHorizontalBox();
            }
            for (Component c : container.getComponents()) {
                container.remove(c);
                newContainer.add(c);
            }
            remove(container);
            add(newContainer, 0);
            container = newContainer;
            container.setAlignmentX(Box.LEFT_ALIGNMENT);
            revalidate();
        });
        add(axisChanger);

    }

    @Override
    public Dimension getPreferredSize() {
        Dimension result = super.getPreferredSize();
        result.width = result.width > minSize.width ? result.width : minSize.width;
        result.height = result.height > minSize.height ? result.height : minSize.height;
        return result;
    }

    public static void main(String[] args) {
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new Main(BoxLayout.X_AXIS));
        frame.pack();
        frame.setVisible(true);
    }

}