【Java17】04 SwingによるGUIアプリ作成 コンポーネント

[M1 Mac mini(2020), macOS Big Sur 11.6.1, VScode ver 1.62.3]

SwingでGUIアプリのガワを作成しました。

少しずつ思い出しながらの作業でした。レイアウトにGridBagLayoutを使ってみました。

Javaは手間こそ掛かるものの堅実な働きぶりで頼もしいです。

M1 Macで環境構築してみて、昨年のJava学習開始から如何に遠回りしてきたかを痛感させられました。今までやってきたことはわざわざMavenやEclipseに頼らなくても全てVScodeの通常プロジェクトで事足りるようです。

これまでの試行錯誤が無駄ではなく血肉になって地力アップにつながっていると考えることにします。

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JRadioButton;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;

public class App extends JPanel{
    private JLabel lbl = new JLabel("PATH");
    private JTextField path = new JTextField();
    private JButton btn1 = new JButton("削除");
    private JButton btn2 = new JButton("クリア");
    private JRadioButton radio1 = new JRadioButton("ディレクトリ");
    private JRadioButton radio2 = new JRadioButton("ファイル");

    public App(){
        GridBagLayout layout = new GridBagLayout();
        this.setLayout(layout);

        GridBagConstraints constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.BOTH;
        constraints.weightx = 10.0;
        constraints.weighty = 10.0;
        constraints.insets = new Insets(2, 2, 2, 2);

        constraints.gridx = 0;	//位置x
        constraints.gridy = 0;	//位置y
        constraints.gridwidth = 1;	//コンポーネントの表示領域のセル数 横
        constraints.gridheight = 1;	//コンポーネントの表示領域のセル数 縦
        layout.setConstraints(lbl, constraints);
        this.add(lbl);

        constraints.gridx = 1;
        constraints.gridwidth = 2;
		constraints.gridheight = 1;
		layout.setConstraints(path, constraints);
		this.add(path);

        constraints.gridx = 3;
		constraints.gridy = 0;
		constraints.gridwidth = 1;
		constraints.gridheight = 1;
		layout.setConstraints(btn1, constraints);
		this.add(btn1);

        constraints.gridx = 1;
		constraints.gridy = 1;
		constraints.gridwidth = 1;
		constraints.gridheight = 1;
		layout.setConstraints(radio1, constraints);
		this.add(radio1);

        constraints.gridx = 2;
		constraints.gridy = 1;
		constraints.gridwidth = 1;
		constraints.gridheight = 1;
		layout.setConstraints(radio2, constraints);
		this.add(radio2);

        constraints.gridx = 3;
		constraints.gridy = 1;
		constraints.gridwidth = 1;
		constraints.gridheight = 1;
		layout.setConstraints(btn2, constraints);
		this.add(btn2);
    }
    public static void main(String[] args){
        JFrame frm = new FrameGridLayout();
		frm.setBounds(100, 100, 350, 150);
	}

}

class FrameGridLayout extends JFrame{
    public FrameGridLayout(){
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.setTitle("FILE REMOVER JV v0.0.1");
		JPanel panel = new App();
		this.setContentPane(panel);
		this.setVisible(true);
    }
}