#作ろうとしているシステムの流れ
0. ユーザに問題を提示し、回答してもらう
(回答するごとにカウンタ変数iをカウントしていき、iがある数字に到達したら回答終了とみなす)
0. 全て回答を終えたら、CardPanelによる画面の切り替えが可能な「結果表示ボタン」を表示し、結果表示画面に移行する
#実現したいこと
カウンタ変数iが一定数カウントされたら、自動的にsetEnabledをtrueに変更し、ボタンが有効になるようにしたい
if文でiの数値による動作を書いているが、カウンタ変数iがある数に到達してもボタンが有効にならない
#疑問・予想
エラーは出ていないためif文は機能していると思うが、cardPanelの再描画がうまくいっていないためボタンが有効になっていても表示されない?
#プログラム
package screen; import //(省略) ・ ・ ・ public class Sc extends JFrame implements ActionListener{ JPanel cardPanel; CardLayout CardLayout; SpringLayout SpringLayout; int i = 0; //カウンタ変数 public static void main(String[] args) { Sc frame = new Sc(); frame.setTitle("画面遷移テスト"); frame.setSize(1450, 900); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setVisible(true); } public Sc() { // panel01(省略) // panel02 JPanel p2 = new JPanel(); p2.setLayout(null); JButton btn02 = new JButton("C"); //iを増やすイベントを持ったボタン btn02.addActionListener(new Code()); p2.add(btn02) // panel03 JPanel p3 = new JPanel(); p2.setLayout(null); JButton btn03 = new JButton("panel03"); p3.add(btn03); // CardLayout用パネル cardPanel = new JPanel(); CardLayout = new CardLayout(); cardPanel.setLayout(CardLayout); cardPanel.add(p1, "panel01"); cardPanel.add(p2, "panel02"); cardPanel.add(p3, "panel03"); // カード移動用ボタン JButton btn_2to3 = new JButton("結果に進む"); btn_2to3.addActionListener(this); btn_2to3.setActionCommand("panel03"); JPanel btnPanel = new JPanel(); btnPanel.add(btn_1to2); btnPanel.add(btn_2to3); btn_2to3.setEnabled(false); if(i==11){ cardPanel.validate(); cardPanel.repaint(); btn_2to3.setEnabled(true); } // cardPanelとカード移動用ボタンをJFrameに配置 Container contentPane = getContentPane(); contentPane.add(cardPanel, BorderLayout.CENTER); contentPane.add(btnPanel, BorderLayout.PAGE_END); } public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); CardLayout.show(cardPanel, cmd); } class Code implements ActionListener{ public void actionPerformed(ActionEvent e) { Clip clip = null; AudioInputStream audioInputStream; try{ //省略 i++; } catch (UnsupportedAudioFileException e1) { e1.printStackTrace(); } catch (LineUnavailableException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } } }
質問を見やすくするために何箇所か省略させていただいておりますが、
その関係でプログラムが変になっている箇所がありましたら申し訳ありません。
ご回答よろしくお願い致します。
#追記
修正前
public class Sc extends JFrame implements ActionListener{ public static void main(String[] args) { Sc frame = new Sc(); frame.setTitle("画面遷移テスト"); frame.setSize(1450, 900); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setVisible(true); } public Sc(){ ・ ・ ・ } ・ ・ ・ }
修正後
public class Sc extends JFrame implements ActionListener{ public static void main(String[] args) { new Sc().setVisible(true); } public Sc(){ setSize(1450, 900); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); ・ ・ ・ } ・ ・ ・ }
まだ回答がついていません
会員登録して回答してみよう