現在、ボタンを押すと
「てすと」(画像ファイル名はtest.jpg)→「てすと2」(画像ファイル名はtest2.jpg)
と画面が切り替えられるプログラムを作成していますが、不明な点があり質問してみました。
2つの画面を作成してみましたが、この後どう合体すればいいのかよく分かりません。分かる方は是非教えて下さい。
<プログラムソース>
(1)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Title extends JFrame{
public Title() {
add(new DrawPanel());
JPanel L = new DrawPanel();
L.setLayout(new BorderLayout());
JPanel L1 = new JPanel();
L1.setOpaque(false);
L1.add(new JButton("OK"));
L.add(L1, BorderLayout.SOUTH);
setContentPane(L);
}
public static void main(String args[]){
JFrame frame = new Title();
frame.setSize(640, 480);
frame.setTitle("てすと");
frame.setLocationRelativeTo(null);
frame.setBackground(Color.pink);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);}
}
class DrawPanel extends JPanel{
String path = "test.jpg";
Image image;
public DrawPanel() {
ImageIcon icon = new ImageIcon(path);
}
public void paintComponent(Graphics args) {
super.paintComponent(args);
args.drawImage(image, 0, 0, this);
args.setFont(new Font("TimesRoman",Font.ITALIC,100));
args.setColor(Color.red);
args.drawString("てすと", 120, 230);
}
}
(2)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Title2 extends JFrame {
public Title2() {
add(new DrawPanel());
JPanel L = new DrawPanel();
L.setLayout(new BorderLayout());
JPanel L1 = new JPanel();
L1.setOpaque(false);
L1.add(new JButton("OK"));
L.add(L1, BorderLayout.SOUTH);
setContentPane(L);
}
public static void main(String args[]){
JFrame frame = new Title2();
frame.setSize(640, 480);
frame.setTitle("てすと");
frame.setLocationRelativeTo(null);
frame.setBackground(Color.white);
frame.setVisible(true);
}
}
class DrawPanel extends JPanel {
String path = "test2.jpg";
Image image;
public DrawPanel() {
ImageIcon icon = new ImageIcon(path);
image = icon.getImage();
}
public void paintComponent(Graphics args) {
super.paintComponent(args);
args.setFont(new Font("TimesRoman",Font.BOLD,40));
args.setColor(Color.blue);
args.drawString("てすと2", 150, 390);
}
}
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();
}
}
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();
}
}
この回答への補足
実行してみましたら、ちゃんと画面が映りました。
補足しますけど、今度は「てすと」では・・・
「テストプログラム」
「今回は、CardLayoutを使用して」
「画像表示のプログラムを作ってみました」
「てすと2」では・・・
「どうでした?」
「皆さんも1度画像表示のプログラムを」
「作ってみてはいかがでしょうか?
と各3行文章を表示させたいですが、どうすればいいですか?
あとはJComboboxを使用せず、CardLayoutとボタン1つで画面が切り替わるソースが分かれば、一緒に教えて頂けると有り難いですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java java final 1 2022/06/10 22:49
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
4択クイズでのランダム出題の...
-
java junit list同士の比較方法
-
エラーで式の開始が不正ですと...
-
javaで文字数制限するには?
-
TextAreaでの文字の色
-
JPanelの切り替えと再描画
-
javaで質問です。 文字列2023/2...
-
大量のデータを読み込んで表示...
-
ループ処理の際、最後だけ","を...
-
Javaで改行などが出来ないのです。
-
動的配列が存在(要素が有る)か...
-
ダブルクォーテーションのrepla...
-
substring バイト単位でやりたい
-
Javaでの改行コード
-
System.err. printlnとSystem.o...
-
VBAで配列の計算
-
C言語でunsigned char配列を連...
-
変数を動的に作るには?
-
switch分が機能しません。
-
オブジェクトの中のプロパティ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
java junit list同士の比較方法
-
JPanelの切り替えと再描画
-
JavaでのSwingを使った簡易電卓...
-
setPrefferedSizeとsetSize
-
javaで文字数制限するには?
-
4択クイズでのランダム出題の...
-
TextAreaでの文字の色
-
最後の行に移動するには?
-
JPanelの重ね方/OverlayLayout他
-
KeyListenerの使い方について
-
【Swing】JPanel クラス外から...
-
JButton-背景の透明化
-
JDialogを閉じた時の処理
-
JTable の 列幅を個別に設定す...
-
VB6.0でのTextboxの高さ変更
-
シンボルを解決できません
-
エラーで式の開始が不正ですと...
-
ArrayListの使い方について(初...
-
’じゃんけん’をするプログラム...
-
JOptionPaneでのフォーカスのト...
おすすめ情報