- ベストアンサー
CardLayoutに関する質問です
- CardLayoutのパネルにFlowLayoutのパネルを追加してもボタンが右端で折り返してくれません
- CardLayoutとFlowLayoutを組み合わせて使用する例が見つかりませんでした
- ソースコードを記載いたしました。お知恵をお借りできれば幸いです
- みんなの回答 (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); } } } }
お礼
ご回答ありがとうございます。 ソースコードの手直しまでしていただいて頭が上がりません。 必要以上に設定してしまっていたことと、私自身インスタンスとthisに対する認識が甘いと痛感いたしました。 また困ったことがあれば質問させていただきますので、その時はまたご教授頂ければ幸いです。