No.2ベストアンサー
- 回答日時:
コードを三箇所追加しました。
コード追加1
何を描画するかの判定、変数。
コード追加2
判定変数の条件文で、何を描画するか、
0で、何も描画しない。
他の数値では、線を描画する。
コード追加3
ボタンのイベント処理で、
変数に1を、入れて、再描画、直線を描く
package pane1;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class p extends JFrame {
private JPanel jp1, jp2;
private JComboBox jcb;
private JButton jb;
//コードの追加1
int gc =0;
public p() {
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(new BorderLayout());
jp1 = new JPanel();
getContentPane().add(jp1, "North");
jp1.setLayout(new FlowLayout());
String[] str = {"a", "b", "c"};
DefaultComboBoxModel combomodel = new DefaultComboBoxModel(str);
jcb = new JComboBox(combomodel);
jcb.setPreferredSize(new Dimension(75, 21));
jp1.add(jcb);
jb = new JButton("ボタン");
jp1.add(jb);
jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jbevent(e);
}
});
jp2 = new JPanel() {
public void paintComponent(Graphics g) {
super.paintComponent(g);
//コードの追加2
if (gc == 0){
}else {
g.drawLine(150, 150, 250, 250);
}
}
};
getContentPane().add(jp2, "Center");
}
private void jbevent(ActionEvent e) {
//コードの追加3
gc =1;
repaint();
//(1)
}
public static void main(String args[]) {
p s3 = new p();
s3.setVisible(true);
}
}
まさにこのとおりです!これを元に作っていきたいと思います。
何度も何度も丁寧に答えてくれてありがとうございました。助かりました。ご返答ありがとうございました。
No.1
- 回答日時:
こんにちは、以下のようで、どうでしょう。
JFramにJPanelを貼り付け、
JPanelのpaintComponent内に
描画するものを書きます。
今回は、便宜的に、drawRectを利用しましたが、
画像にしたいなら、drawImageにすれば
良いと思います。
画像を変えたいなら、
ボタンで、drawImageのImageを
いろいろ変えてみればいいと思います。
また、実行してみると、ウィンドのサイズを
変えたり、サイズを変えても、画像が
消えることは、無いです。
package kienai;
import java.awt.Graphics;
import javax.swing.JPanel;
/**
*
* @author
*/
public class kienai extends javax.swing.JFrame {
int x = 0,y = 0;
/** Creates new form kienai */
public kienai() {
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" 生成されたコード">
private void initComponents() {
jPanel1 = new JPanel(){
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawRect(x, y, 100, 100);
}
};
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel1.setLayout(null);
jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jPanel1.add(jButton1);
jButton1.setBounds(200, 280, 75, 21);
jButton2.setText("jButton2");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jPanel1.add(jButton2);
jButton2.setBounds(320, 280, 75, 21);
getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-425)/2, (screenSize.height-349)/2, 425, 349);
}
// </editor-fold>
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
x=100;y=100;
repaint();
// ここに処理コードを追加:
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
x=10;y=10;
repaint();
// ここに処理コードを追加:
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new kienai().setVisible(true);
}
});
}
// 変数宣言 - 編集不可
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JPanel jPanel1;
// 変数宣言の終わり
}
ご返答ありがとうございます。
返答して頂いたプログラムを実行しますと、描画内容が消えることもなく、すばらしいプラグラムだと思います。
しかし、ボタンを押すと描画される、という質問なのですが、最初何も描画されていない状態から、ボタンを押すと描画される方法を知りたいのです。
そこで、tom11さんのを参考にプログラムしてみました。
package test20060207;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class sample3 extends JFrame {
private JPanel jp1, jp2;
private JComboBox jcb;
private JButton jb;
public sample3() {
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(new BorderLayout());
jp1 = new JPanel();
getContentPane().add(jp1, "North");
jp1.setLayout(new FlowLayout());
String[] str = {"a", "b", "c"};
DefaultComboBoxModel combomodel = new DefaultComboBoxModel(str);
jcb = new JComboBox(combomodel);
jcb.setPreferredSize(new Dimension(75, 21));
jp1.add(jcb);
jb = new JButton("ボタン");
jp1.add(jb);
jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jbevent(e);
}
});
jp2 = new JPanel() {
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawLine(150, 150, 250, 250);
}
};
getContentPane().add(jp2, "Center");
}
private void jbevent(ActionEvent e) {
//(1)
}
public static void main(String args[]) {
sample3 s3 = new sample3();
s3.setVisible(true);
}
}
(1)の部分に何を入れれば、実現するのでしょうか?
度々質問してしまい申し訳ありません。
ぜひよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 2つのウィンドウ選択時の表示について 10 2023/07/25 08:48
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- PHP 記述のおかしいところを教えて下さい。 1 2023/02/03 11:25
- その他(ソフトウェア) Figma 1 2023/06/23 14:22
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- Excel(エクセル) エクセル、画像ファイル名の書かれたセル(複数個所)に画像を一括で表示させる方法 1 2023/04/19 00:19
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(パソコン・周辺機器) ウインドウズ10のログオフ画面に現れる画像について教えて下さい ログオフをしてログイン待ちの画面にな 1 2023/05/19 21:37
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
この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でのフォーカスのト...
おすすめ情報