[Java] 46 Swing 02 パネルとコンポーネントの配置

contentPaneにパネルとコンポーネントを配置しました。

コンポーネントを左寄せにする方法で少しだけ手間取ったので記録を残しておきます。

SwingはPythonのtkinterに使用感が似ています。ただデザインタブで配置が視覚的にできる分、こちらの方がやや優勢でしょうか。

使い勝手で申し分のないJavaFXが使えないのはつくづく残念です。

あとはボタンアクションを追記し、標準出力をPAGE_ENDに表示させるなどして一応完了となります。

package horse_search;

<importは略>

public class Main extends JFrame {

	private JPanel contentPane;
	private JTextField textField;

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Main frame = new Main();
					frame.setVisible(true);
				}
				catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	public Main() {
		// contentPane設定
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 1500, 750);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);

   // CENTER設定
		JEditorPane editorPane = new JEditorPane();
		contentPane.add(editorPane, BorderLayout.CENTER);
		editorPane.setContentType("text/html");
		try {
			editorPane.setPage(new File("シャフリヤール.html").toURI().toURL());
        }
		catch (IOException e) {
			e.printStackTrace();
		}
		
		// PAGE_START設定
		JPanel panel = new JPanel();
		panel.setLayout(new FlowLayout(FlowLayout.LEFT));
		contentPane.add(panel, BorderLayout.PAGE_START);
		
		JLabel label = new JLabel("競走馬名");
	    JTextField text = new JTextField(20);
	    JButton btnNewButton = new JButton("検索");
	    textField = new JTextField(3);
	    JButton btnNewButton_1 = new JButton("確定");
	    	    
	    panel.add(label);
	    panel.add(text);
	    panel.add(btnNewButton);
		panel.add(textField);
		panel.add(btnNewButton_1);
		
		// PAGE_END設定
		JPanel panel2 = new JPanel();
		panel2.setLayout(new FlowLayout(FlowLayout.LEFT));
		contentPane.add(panel2, BorderLayout.PAGE_END);
		
		JTextArea textArea = new JTextArea(15,30);
		textArea.setLayout(new FlowLayout(FlowLayout.LEFT));
		panel2.add(textArea);

[Java] 45 Swing 01 HTMLファイルの表示

JavaFXでWebページの表示はできたのですが、ローカルHTMLファイルの方がどうしてもできません。

JavaFXよりもさらに古いSwingというツールを使ってみたところ、あっけなく解決しました。

JavaFXで色々試しても打開できず、やはりmacOSではJavaよりもSwiftなのかと半ば諦めていました。

SwingはJava8以前でしか使えませんが、JavaFXが私の手に余るので仕方がないです。

あとは競争馬名を入力するテキストフィールドやボタンを配置して完成です。

2021/8/28追記:SwingはJava9以降でも使えます。勘違いしていました。

package swing;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.io.File;
import java.io.IOException;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class Sample extends JFrame {

	private JPanel contentPane;

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Sample frame = new Sample();
					frame.setVisible(true);
				}
				catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	public Sample() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		JEditorPane editorPane = new JEditorPane();
		contentPane.add(editorPane, BorderLayout.CENTER);
		editorPane.setContentType("text/html");
		try {
			editorPane.setPage(new File("シャフリヤール.html").toURI().toURL());
        }
		catch (IOException e) {
			e.printStackTrace();
		}
	}
}