• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CardLayoutに関する質問です)

CardLayoutに関する質問です

このQ&Aのポイント
  • CardLayoutのパネルにFlowLayoutのパネルを追加してもボタンが右端で折り返してくれません
  • CardLayoutとFlowLayoutを組み合わせて使用する例が見つかりませんでした
  • ソースコードを記載いたしました。お知恵をお借りできれば幸いです

質問者が選んだベストアンサー

  • ベストアンサー
  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.1

 こんにちは。  mainPanel と Mainクラスのインスタンスの役割がかぶっているので、混乱してしまっているようです。  そこら辺を整理した方がいいです。  あと、各パネルに setBounds をしていますが、LayoutManager を使っているなら、意味がないので不要です。 class Main extends JPanel implements ActionListener {   static JFrame frame = new JFrame();   String[] imgStr = {"1", "2", "3", "4", "5", "6", "7", "8", "9",     "10", "11", "12", "13", "14", "15", "16", "17", "18",     "19", "20", "21", "22", "23", "24", "25", "26", "27",     "28", "29", "30", "31", "32", "33", "34", "35", "36",     "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "終了"};   JButton[] bt = new JButton[imgStr.length];   JPanel btPanel = new JPanel();   JPanel image;   MediaTracker tracker;   CardLayout cardLayout = new CardLayout();   Image img;   JLabel canvas;   Timer time = new Timer(0, this);   int eventNo = -1;   public static void main(String[] args) {     frame.setLayout(new BorderLayout());     frame.add(new Main(), BorderLayout.CENTER);     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.setBounds(0, 0, 1024, 576);     frame.setTitle("タイトル");     frame.setVisible(true);   }   public Main() {     setLayout(cardLayout);     btPanel.setLayout(new FlowLayout());     for (int i = 0; i < imgStr.length; i++) {       bt[i] = new JButton(imgStr[i]);       bt[i].setActionCommand(imgStr[i]);       bt[i].addActionListener(this);       btPanel.add(bt[i]);     }     add(btPanel, "bt");   }   public void actionPerformed(ActionEvent e) {     if (e.getActionCommand() == null) {       eventNo = -1;     } else {       for (int i = 0; i < imgStr.length; i++) {         if (e.getActionCommand().equals(imgStr[i])) {           eventNo = i;         }       }     }     if (eventNo == -1) {       time.stop();       cardLayout.show(this, "bt");     }     if (eventNo == 46) {       System.exit(0);     }     if (eventNo >= 0) {       tracker = new MediaTracker(this);       try {         img = ImageIO.read(new File("001.JPG"));         tracker.addImage(img, 0);         tracker.waitForAll();         canvas = new JLabel(new ImageIcon(img));         this.add(canvas, "img");         cardLayout.show(this, "img");         time.setInitialDelay(5000);         time.start();       } catch (Exception ex) {         System.out.println(ex);       }     }   } }

java0218
質問者

お礼

ご回答ありがとうございます。 ソースコードの手直しまでしていただいて頭が上がりません。 必要以上に設定してしまっていたことと、私自身インスタンスとthisに対する認識が甘いと痛感いたしました。 また困ったことがあれば質問させていただきますので、その時はまたご教授頂ければ幸いです。

関連するQ&A

専門家に質問してみよう