JavaSwingのプログラミングです。このプログラミンでは、インスタンスがコンポーネント(画面部品)という形で目で見ることができます。
画面を作成していく中で、インスタンスの考え方がわかってくると思います。なので、基本として扱っています。
ポイントとしては、JLabelもJButtonもインスタンス化しているのでラベルとボタンがインスタンス化されています。
このプログラムでは、JFrame、JPanel、JLabel、 JButton x 20の23のインスタンスがあります。
【処理内容】
1. Main#メインメソッド()を実行する
2. Sample#exev\cute()を実行する
3. JFrameのサイズと表示位置を設定する
4. 画面を終了したら、アプリケーションを終了する設定をする
5. JJFrameクラスから、Container クラスを取得する。
6. JLabelを作成する(インスタンス化)
7. JPanelをインスタンス化する
8. JPanelにBorderLayoutをセット
8. JLabelをJPanelの北にセットする
9. MtButtonをインスタンス化してJPanelの中央にセット
10. JButtonをインスタンス化してJPanelの南にセット
11. ContainerクラスにJPanelをセットする
12. JFrameを表示する(setVisible(true))
<テストクラスについて>
テストをするのに、おなじみ「JUnit」を使用します。JUnit4(org.junit)とJUnit5(org.junit.jupiter)でパッケージが違うので注意が必要です。4と5を混ぜないようにしましょう。テストの前処理は「BeforeAll」後処理は「AfterAll」のアノテーションをつければよいです。
【テストクラス1】
import org.junit.jupiter.api.Test;
public class SampleClassTest {
private static SampleClass target;
@BeforeAll
public static void init() {
target = new SampleClass();
}
@AfterAll
public static void terminated() {
target = null;
}
@Test
public void test() {
//assertTrue(target.isNumber("1"));
}
}
【テストクラス2】
public class MtButtonTest {
private static MtButton target;
@BeforeAll
public static void init() {
target = new MtButton("Test");
}
@AfterAll
public static void terminated() {
target = null;
}
@Test
public void testIsNumber() {
assertTrue(target.isNumber("1"));
assertFalse(target.isNumber(""));
assertFalse(target.isNumber("12"));
assertFalse(target.isNumber(null));
}
}
【MtButtonクラスのコード】
public class MtButton extends JButton
implements ActionListener {
public MtButton(String mes) {
setText(mes);
setBackground(Color.RED);
addActionListener(this);
}
public MtButton(String mes, JLabel lbl) {
this.lbl = lbl;
setText(mes);
//setBackground(Color.RED);
addActionListener(this);
}
public boolean isNumber(String num) {
return num.matches("[0-9]");
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Hello action");
String tmp = getText();
if (isNumber(tmp)) {
lbl.setText(tmp);
}
}
}
【SampleClassクラスのコード】
public class SampleClass extends JFrame {
public void execute() {
System.out.println("Execute");
}
public void execute(String message) {
System.out.println(message);
setTitle(message);
setBounds(200, 200
, 300, 400);
setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE
);
Container cont = getContentPane();
MtLabel lbl = new MtLabel(message);
JPanel pn = new JPanel();
pn.setLayout(new BorderLayout());
pn.add(lbl, BorderLayout.NORTH);
JPanel butPn = this.createButPanel();
for (int i = 0; i < 20; i++) {
butPn.add(new MtButton(
this.buttonNames()[i]
, lbl));
}
pn.add(butPn, BorderLayout.CENTER);
pn.add(new JButton("South"), BorderLayout.SOUTH);
cont.add(pn);
setVisible(true);
}
public JPanel createButPanel() {
JPanel butPn = new JPanel();
butPn.setLayout(new GridLayout(4, 5));
return butPn;
}
public boolean isNumber(String num) {
return num.matches("[0-9]");
}
private String[] buttonNames() {
return new String[] {"AC", "7", "8", "9", "/"
, "%", "4", "5", "6", "*"
, "^", "1", "2", "3", "-"
, "√", "0", ".", "=", "+"};
}
}
【Mainクラスのコード】
public class Main {
public static void main(String[] args) {
SampleClass main = new SampleClass();
main.execute("Hello Goo");
}
}