• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:画面を切り替えたい)

画面切り替えプログラムの作成方法と合体手順

このQ&Aのポイント
  • ボタンを押すと「てすと」というタイトルの画面から「てすと2」というタイトルの画面に切り替わるプログラムを作成しています。2つの画面を作成し、合体する方法を教えてください。
  • java.awtおよびjavax.swingを使用して、画面の切り替えプログラムを作成しています。ボタンをクリックすると、「てすと」というタイトルの画面から「てすと2」というタイトルの画面に切り替わります。
  • ボタンを押すと画面が切り替わるプログラムを作成したいです。現在、「てすと」というタイトルの画面から「てすと2」というタイトルの画面に切り替えることができますが、2つの画面をどのように合体させれば良いのか分かりません。どなたか教えてください。

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

  • ベストアンサー
  • ontojava
  • ベストアンサー率61% (8/13)
回答No.2

こんな感じですか import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Title extends JFrame implements ActionListener { boolean inAnApplet = true; JPanel cards; JButton kirikae; final static String TEST_PANEL = "てすと"; final static String TEST2_PANEL = "てすと2"; String currentPanel = TEST_PANEL; public Title() { Container contentPane = getContentPane(); kirikae = new JButton("切替"); kirikae.setActionCommand("change"); kirikae.addActionListener(this); JPanel bp = new JPanel(); bp.add(kirikae); // Use the default layout manager, BorderLayout contentPane.add(bp, BorderLayout.SOUTH); cards = new JPanel(); cards.setLayout(new CardLayout() ); DrawPanel p1 = new DrawPanel ("テストプログラム" , "今回は、CardLayoutを使用して" , "画像表示のプログラムを作ってみました", "test.jpg" ); DrawPanel p2 = new DrawPanel ("どうでした?" , "皆さんも一度画像表示のプログラムを" , "作ってみてはいかがでしょうか?", "test2.jpg") ; cards.add(p1, TEST_PANEL); cards.add(p2, TEST2_PANEL); contentPane.add(cards, BorderLayout.CENTER); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { if (inAnApplet) { dispose(); } else { System.exit(0); } } } ); } public void actionPerformed (ActionEvent e) { CardLayout cl = (CardLayout)(cards.getLayout() ); if (e.getActionCommand().equals("change")) { if (currentPanel == TEST_PANEL) { cl.show(cards, TEST2_PANEL ); currentPanel = TEST2_PANEL; } else { cl.show(cards, TEST_PANEL ); currentPanel = TEST_PANEL; } } } public static void main(String[] argv) { Title window = new Title(); window.inAnApplet = false; window.setTitle("CardLayout"); window.pack(); window.setVisible(true); } public Dimension getMinimumSize() { return new Dimension(640,480); } public Dimension getPreferredSize() { return getMinimumSize(); } } class DrawPanel extends JPanel{ String message1, message2, message3 ; String path ; Image image; public DrawPanel(String m1, String m2, String m3, String fileName) { //ImageIcon icon = new ImageIcon(path); Toolkit toolkit = Toolkit.getDefaultToolkit(); this.path = fileName; this.message1 = m1; this.message2 = m2; this.message3 = m3; image = toolkit.getImage (path); } public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(image, 0, 0, this); g.setFont(new Font("TimesRoman",Font.ITALIC,30)); g.setColor(Color.red); g.drawString(this.message1 , 60, 230); g.drawString(this.message2 , 60, 260); g.drawString(this.message3 , 60, 290); } public Dimension getMinimumSize() { return new Dimension(640,400); } public Dimension getPreferredSize() { return getMinimumSize(); } }

xiara
質問者

お礼

実行してみましたら、ちゃんと画像と文字が同時に表示しました! とても助かりましたよ。 本当に有難うございます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • ontojava
  • ベストアンサー率61% (8/13)
回答No.1

ボタンを押すごとに現在表示しているパネルをremove、もう一方のパネルをaddするという方法もありますが、 カードレイアウトを使ってみました。 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Title extends JFrame implements ItemListener { boolean inAnApplet = true; JPanel cards; final static String TEST_PANEL = "てすと"; final static String TEST2_PANEL = "てすと2"; public Title() { Container contentPane = getContentPane(); // Put the JComboBox in a JPanel to get a nicer look. String comboBoxItems[] = {TEST_PANEL, TEST2_PANEL }; JPanel cbp= new JPanel(); JComboBox c = new JComboBox(comboBoxItems); c.setEditable(false); c.addItemListener(this); cbp.add(c); // Use the default layout manager, BorderLayout contentPane.add(cbp, BorderLayout.NORTH); cards = new JPanel(); cards.setLayout(new CardLayout() ); DrawPanel p1 = new DrawPanel ("てすと", "test.jpg" ); DrawPanel p2 = new DrawPanel ("てすと2", "test2.jpg") ; cards.add(p1, TEST_PANEL); cards.add(p2, TEST2_PANEL); contentPane.add(cards, BorderLayout.CENTER); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { if (inAnApplet) { dispose(); } else { System.exit(0); } } } ); } public void itemStateChanged(ItemEvent evt) { CardLayout cl = (CardLayout)(cards.getLayout() ); cl.show(cards, (String)evt.getItem() ); } public static void main(String[] argv) { Title window = new Title(); window.inAnApplet = false; window.setTitle("CardLayout"); window.pack(); window.setVisible(true); } public Dimension getMinimumSize() { return new Dimension(640,480); } public Dimension getPreferredSize() { return getMinimumSize(); } } class DrawPanel extends JPanel{ String titleName; String path ; Image image; public DrawPanel(String title, String fileName) { //ImageIcon icon = new ImageIcon(path); Toolkit toolkit = Toolkit.getDefaultToolkit(); this.path = fileName; this.titleName = title; image = toolkit.getImage (path); } public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(image, 0, 0, this); g.setFont(new Font("TimesRoman",Font.ITALIC,100)); g.setColor(Color.red); g.drawString(titleName, 120, 230); } public Dimension getMinimumSize() { return new Dimension(640,400); } public Dimension getPreferredSize() { return getMinimumSize(); } }

xiara
質問者

補足

実行してみましたら、ちゃんと画面が映りました。 補足しますけど、今度は「てすと」では・・・ 「テストプログラム」 「今回は、CardLayoutを使用して」 「画像表示のプログラムを作ってみました」 「てすと2」では・・・ 「どうでした?」 「皆さんも1度画像表示のプログラムを」 「作ってみてはいかがでしょうか? と各3行文章を表示させたいですが、どうすればいいですか? あとはJComboboxを使用せず、CardLayoutとボタン1つで画面が切り替わるソースが分かれば、一緒に教えて頂けると有り難いですが。

すると、全ての回答が全文表示されます。

関連するQ&A