【Java17】06 SwingによるGUIアプリ作成 ボタンのアクション設定

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

削除ボタンを押すとTextFieldに入力したパスを読み取り、サブディレクトリ内のファイルを含め全て消去するようにしました。ディレクトリのツリー構造は残ります。

色設定では16進数カラーコードをわざわざRGBに変換しています。普通にXXX.setBackground(new Color(0xカラーコード))で設定可能なのを忘れていました。

下のTextAreaには処理時間や削除したファイル数などを表示するようにしますが、とりあえず完成とします。

Javaは高機能なのはいいものの、とても覚えられるような量ではないので逆引き辞典が欲しいところです。

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 javax.swing.JTextArea;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Color;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;
import java.util.List;
import java.util.Arrays;
import java.util.stream.Collectors;

public class App extends JPanel{
    private JLabel lbl = new JLabel("PATH");
    private JTextField tfield = new JTextField();
    private JButton btn1 = new JButton("削除");
    private JButton btn2 = new JButton("クリア");
    private JTextArea area = new JTextArea();

	Color lemonchiffon = new Color(0xfffacd);
	int lemonchiffon_red = lemonchiffon.getRed();
	int lemonchiffon_green = lemonchiffon.getGreen();
	int lemonchiffon_blue = lemonchiffon.getBlue();

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

        GridBagConstraints constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.BOTH;
		constraints.insets = new Insets(2, 5, 2, 5);

        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.gridy = 0;
		constraints.gridwidth = 2;
		constraints.gridheight = 1;
		constraints.weightx = 1;
		tfield.setBackground(new Color(lemonchiffon_red,lemonchiffon_green,lemonchiffon_blue));
		layout.setConstraints(tfield, constraints);
		this.add(tfield);

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

		btn1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				String str = tfield.getText();
				try{
					Stream<Path> list = Files.walk(Paths.get(str));
					Path[] array = list.toArray(Path[]::new);
					List<Path> list2 = Arrays.asList(array);

					for(int i=0; i<list2.size(); i++) {
						Path p = Paths.get(list2.get(i).toString());
						if (Files.isDirectory(p)){
							;
						}else{
							try{
								Files.delete(list2.get(i));
							}catch(IOException e2) {
								System.out.println(e2);
							}
						}
					}

					list.close();

				}catch(IOException e1) {
					System.out.println(e1);
				}
			}
		});
        
        constraints.gridx = 3;
		constraints.gridy = 1;
		constraints.gridwidth = 1;
		constraints.gridheight = 1;
		layout.setConstraints(btn2, constraints);
		this.add(btn2);

		btn2.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				tfield.setText("");
			}
		});

		constraints.gridx = 0;
		constraints.gridy = 2;
		constraints.gridwidth = 4;
		constraints.gridheight = 1;
		constraints.weighty = 1;
		area.setBackground(new Color(lemonchiffon_red,lemonchiffon_green,lemonchiffon_blue));
		layout.setConstraints(area, constraints);
		this.add(area);
    }
    public static void main(String[] args){
        JFrame frm = new FrameGridLayout();
		frm.setBounds(100, 100, 350, 200);
	}
}

class FrameGridLayout extends JFrame{
	Color palegreen = new Color(0x98fb98);
	int palegreen_red = palegreen.getRed();
	int palegreen_green = palegreen.getGreen();
	int palegreen_blue = palegreen.getBlue();

    public FrameGridLayout(){
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.setTitle("FILE REMOVER JV v0.0.1");
		JPanel panel = new App();
		panel.setBackground(new Color(palegreen_red,palegreen_green,palegreen_blue));
		this.setContentPane(panel);
		this.setVisible(true);
    }
}