実現したいこと
グリッドレイアウトでカウンタを作りたい。
パネルを2つウィンドウに表示したい。
前提
javaでカウンタのプログラムを作っています。
以下に問題文と実行したい結果を載せます。
グリッドレイアウト を用いて,実行例のように表示用の 1 つのラベルと制御用の 4 つのボタンを表示するプログラムを作成しなさい.ただし,ウィンドウサイズは横 640 画素,縦 240 画素とし,ウィンドウのタイトルに「基本課題 4」と表示すること.また,ウィンドウはプログラムの起動時にディスプレイの中央に表示されるようにすること.さらに,ActionLister を用いて,以下の機能を実装しなさい.
・ 「+1 ボタン」「+10 ボタン」「+100 ボタン」はそれぞれラベルの数字を 1,10,100 だけ増加させる.
・ 「リセットボタン」はラベルの数字を 1 に初期化する.(起動時のラベルの数字も 1 にすること.)
発生している問題・エラーメッセージ
カウンタの数値のラベルと数値を増やすボタンのパネルを別々に表示したいが、最後に追加したボタンのパネルだけ表示されてしまいます。
該当のソースコード
java
1package kadai; 2 3import java.awt.GridLayout; 4import java.awt.event.ActionEvent; 5import java.awt.event.ActionListener; 6 7import javax.swing.JButton; 8import javax.swing.JFrame; 9import javax.swing.JLabel; 10import javax.swing.JPanel; 11import javax.swing.SwingUtilities; 12 13public class Kihon4 { 14 15 private JFrame jf = null; 16 private JPanel cp = null; 17 private JPanel cp2 = null; 18 private JLabel jl = null; 19 private JButton jb = null, jb2 = null, jb3 = null, jb4 = null; 20 private int i = 1; 21 22 private JFrame getJFrame() { 23 if (jf == null) { 24 jf = new JFrame(); 25 jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 26 jf.setSize(640, 240); 27 jf.setLocationRelativeTo(null); 28 jf.setContentPane(getJContentPane()); 29 jf.setContentPane(getJContentPane2()); 30 jf.setTitle("基本課題4"); 31 } 32 return jf; 33 } 34 35 private JPanel getJContentPane() { 36 if (cp == null) { 37 cp = new JPanel(); 38 cp.setLayout(new GridLayout(1, 1)); 39 cp.add(getJLabel()); 40 } 41 return cp; 42 } 43 44 private JPanel getJContentPane2() { 45 if (cp2 == null) { 46 cp2 = new JPanel(); 47 cp2.setLayout(new GridLayout(1, 4)); 48 cp2.add(getJButton()); 49 cp2.add(getJButton2()); 50 cp2.add(getJButton3()); 51 cp2.add(getJButton4()); 52 } 53 return cp2; 54 } 55 56 private JLabel getJLabel() { 57 if (jl == null) { 58 jl = new JLabel(); 59 jl.setText(Integer.toString(i)); 60 } 61 return jl; 62 } 63 64 private JButton getJButton() { 65 if (jb == null) { 66 jb = new JButton(); 67 jb.setText("+1ボタン"); 68 jb.addActionListener(new MyActionListener()); 69 } 70 return jb; 71 } 72 73 private JButton getJButton2() { 74 if (jb2 == null) { 75 jb2 = new JButton(); 76 jb2.setText("+10ボタン"); 77 jb2.addActionListener(new MyActionListener2()); 78 } 79 return jb2; 80 } 81 82 private JButton getJButton3() { 83 if (jb3 == null) { 84 jb3 = new JButton(); 85 jb3.setText("+100ボタン"); 86 jb3.addActionListener(new MyActionListener3()); 87 } 88 return jb3; 89 } 90 91 private JButton getJButton4() { 92 if (jb4 == null) { 93 jb4 = new JButton(); 94 jb4.setText("リセットボタン"); 95 jb4.addActionListener(new MyActionListener4()); 96 } 97 return jb4; 98 } 99 100 class MyActionListener implements ActionListener { 101 public void actionPerformed(ActionEvent e) { 102 i++; 103 jl.setText(Integer.toString(i)); 104 } 105 } 106 107 class MyActionListener2 implements ActionListener { 108 public void actionPerformed(ActionEvent e) { 109 i += 10; 110 jl.setText(Integer.toString(i)); 111 } 112 } 113 114 class MyActionListener3 implements ActionListener { 115 public void actionPerformed(ActionEvent e) { 116 i += 100; 117 jl.setText(Integer.toString(i)); 118 } 119 } 120 121 class MyActionListener4 implements ActionListener { 122 public void actionPerformed(ActionEvent e) { 123 i = 1; 124 jl.setText(Integer.toString(i)); 125 } 126 } 127 128 public static void main(String[] args) { 129 // TODO 自動生成されたメソッド・スタブ 130 SwingUtilities.invokeLater(new Runnable() { 131 public void run() { 132 Kihon4 application = new Kihon4(); 133 application.getJFrame().setVisible(true); 134 } 135 }); 136 } 137} 138 139 140 141### 試したこと 142パネルに2つを用意するためにをコンテントペーンを2つ設定せる処理を試しました。しかし、後から追加したボタンしか設定できませんでした 143 144### 補足情報(FW/ツールのバージョンなど) 145開発環境:Eclipse 2022 146OS: Windows 10 147
