javaのguiのプログラミングなのですが、ボールを動かし軌跡を残したいのです。repaintを使って、ボールを動かして行きながら軌跡を残すプログラムを作った所、ボールはちゃんと動いたのですが、軌跡は書いては消えて書いては消えてをくりかえしているようで、画面に残らないんです。解決方法をお教えください。

A 回答 (3件)

Appletか何かで作っていますか?


repaint()を呼ぶとupdate()が呼ばれ、そこからさらにpaint()が呼ばれます。しかし、update()はpaint()を呼ぶ前に画面をクリアします。一度書いた軌跡が消されてしまうのはこのためです。
画面のクリアを防ぐためにはupdate()をオーバーライドしてpaint()だけを実行するように変えればいいです。
public void update(Graphics g) {
paint(g);
}
    • good
    • 0

「ボールの軌跡がランダム」ってどういうこと?


そして, 「計算できない」ものがなんで「表示できる」と思えるの?

「ボールの過去の位置」をつなぐなら当然できる. 「それまでにボールがあった位置」を覚えておけばいい. ただそれだけ.
    • good
    • 0

「ボールの軌跡」というのはすなわち


「それまでにボールがあったところ」
だよね.

だから,
「それまでにボールがあったすべての位置でボールを描く」
だけ.

この回答への補足

ボールの軌跡がランダムで計算できないのです。
ボールの軌跡は線で表示したいです。

補足日時:2011/04/13 23:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QHow about you の意味と使い方がわかりません

How about you の意味と使い方がわかりません。
あなたはどう思っていますか?のような使い方だとは思うのですが、外人が話しているのを聞くとどうしてもいろんな使い方をしているような感じがして質問しました。使い方や話のどういう流れで使えばいいのか教えていただけませんか?よろしくお願いします

Aベストアンサー

あなたはどうなの?的な表現ですね。

例えば、

A:How's it going? (調子どう?)
B:Nothing much. (たいしたことないよ。)
How about you? (君はどんな感じ?)
A: Well, I'm alright. You know what? I've decided to move to NY next month. (まあまあかな。そういえば来月にNYに引っ越すことに決めたんだ)

------------------

A: Are you hungry? (おなかすいた?)
B: Yeah, a little bit, how about you? (うん、ちょっとだけ、君は?)


のような感じでしょうか。

QJavaのGUIプログラミング

javaのGUIプログラミングでメニューを作成したのですが、どうしてわからないところがあります。

ルートペインにメニューを追加した後、各々の処理を記述しようとするときに、
ActionListenerを実装したクラスのactionPerformedメソッドでイベントが起きたものをif文で場合分けして、それぞれの処理を記述していますが、これがいい方法だとはどうしても思えません。

自分なり考えた結果、
・各メニューごとにクラスを作成してそこに処理を書き込む
・匿名のインナークラスを使用する

を思いついたのですが、初心者なのでこの場合に応用できません。
分かりにくい文章で申し訳ないのですが、なにかアドバイスをいただけないでしょうか?
できれば、参考になるソースをのせてくれると勉強しやすいので助かります。

よろしくお願いします。

Aベストアンサー

 こんにちは。

>ActionListenerを実装したクラスのactionPerformedメソッドで
>イベントが起きたものをif文で場合分けして、それぞれの処理を
>記述していますが、これがいい方法だとはどうしても思えません。

 あくまでも個人的好みですが、私も、これがかっこいい書き方とは思えませんねぇ。
 なんか、オブジェクト指向的じゃないような気がして・・・。

 私は、普通のインナークラスを使う方法が多いです。
 匿名クラスは、初期化のメソッド内がごちゃごちゃしてくるので、これまた、好きではありませんので。

(コンパイルするときは全角スペースを半角スペースに変換してからにしてください)

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test extends JFrame {
  JButton button1;
  JButton button2;

  public Test() {
    Container con = getContentPane();
    con.setLayout(new FlowLayout());

    button1 = new JButton("button1");
    button1.addActionListener(new Button1Clicked());
    con.add(button1);

    button2 = new JButton("button2");
    button2.addActionListener(new Button2Clicked());
    con.add(button2);

    pack();
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

  class Button1Clicked implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      System.out.println("button1 clicked!");
    }
  }

  class Button2Clicked implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      System.out.println("button2 clicked!");
    }
  }

  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        new Test().setVisible(true);
      }
    });
  }
}

 ただ、メニューバーやツールバーなどを備えた本格的なインターフェスを構築したいときは、Actionインターフェイスを使いこなせるようになった方がいいですよ。

 こんにちは。

>ActionListenerを実装したクラスのactionPerformedメソッドで
>イベントが起きたものをif文で場合分けして、それぞれの処理を
>記述していますが、これがいい方法だとはどうしても思えません。

 あくまでも個人的好みですが、私も、これがかっこいい書き方とは思えませんねぇ。
 なんか、オブジェクト指向的じゃないような気がして・・・。

 私は、普通のインナークラスを使う方法が多いです。
 匿名クラスは、初期化のメソッド内がごちゃごちゃしてくるので、これまた、好きで...続きを読む

Q考え候う。思い候う。 候うってどういう意味ですか? 上記の使い方で意味はどうなりますか? 使い方は合

考え候う。思い候う。

候うってどういう意味ですか?

上記の使い方で意味はどうなりますか?

使い方は合ってますか?

Aベストアンサー

ここでは、補助動詞としての用法です。
考え候う。→考へ候ふ。(考えます。)
思い候う。→思ひ候ふ。(思います。)
使い方は合ってますか?
 古語ですから、仮名遣いが違ってきます。

以下辞書の引用………………
小学館 全文全訳古語辞典
さうら・ふ 【候ふ】 〔ソウロウ〕
一 〔自動詞ハ行四段〕
❶ 《「あり」「をり」「仕ふ」の謙譲語》 目上の人のそばに控える。お仕えする。
例「そのならん様(やう)を見んとて、かくて候ふ」〈平家・1・殿上闇討〉
訳 その事の成り行きを見届けようと思って、こうして控えております。
❷「あり」「をり」の丁寧語。ございます。あります。
例「しかしかの宮のおはしますころにて、御仏事など候ふにや」〈徒然草・44〉
訳 これこれの宮様がおいでになっている時分で、ご法事などがございますのでしょうか。

二 〔補助動詞ハ行四段〕 《活用語の連用形および接続助詞「て」に付いて》 丁寧の意を表す。…(で)ございます。…ます。
例「大納言がことをばいかが聞こし召され候ふ」〈平家・2・少将乞請〉
訳 大納言のことはどうお聞きになりましたか。

[参考]
中世に「さぶらふ」から変化してできた語。『平家物語』では、男性は「さうらふ」を、女性は「さぶらふ」を用いている。また、謡曲では、女性が「さむらふ」を用いる。「さうらふ」が更に変化した「さう」「す」「そうろ」「そろ」などの語形もある。

ここでは、補助動詞としての用法です。
考え候う。→考へ候ふ。(考えます。)
思い候う。→思ひ候ふ。(思います。)
使い方は合ってますか?
 古語ですから、仮名遣いが違ってきます。

以下辞書の引用………………
小学館 全文全訳古語辞典
さうら・ふ 【候ふ】 〔ソウロウ〕
一 〔自動詞ハ行四段〕
❶ 《「あり」「をり」「仕ふ」の謙譲語》 目上の人のそばに控える。お仕えする。
例「そのならん様(やう)を見んとて、かくて候ふ」〈平家・1・殿上闇討〉
訳 その事の成り行きを見届けようと思って、こうして控え...続きを読む

QJavaでゲームプログラミング【GUI】

Javaで

     pack();


ってのはどういう処理を行っているのですか?

たとえば、

super("タイトル");
pack();←コレ。

setVisible(true);
setVisible(false);
pack();←コレ。

setResizable(false);
pack();←コレ。

        ・
        ・
        ・


教えてください。お願いします。

Aベストアンサー

http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Window.html#pack()
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/awt/Window.html#pack()

ウインドウのサイズを
「内部レイアウトや
サブコンポーネント(内部のコンポーネント)の情報(※推奨
サイズなど)から」
算出し、設定する。

といったところかな?
---

つまり、ウインドウ自身の大きさを、
window.setSize(640,480)
などと「みずから決定するやりかた」とは対照的なやり方であり、

window.pack()
とすれば、
ウインドウ自身の大きさをプログラマが直接指定しなくても、
その大きさは「自動的に」計算される。
(※ということは、ウインドウの大きさは、
プログラマははっきりとはわからない)
---

言い換えれば、
ウインドウや、その内部コンポーネント群の配置を
「外枠から」決定するやり方(※まず全体の「箱」の
大きさを決めてしまうやり方)が
window.setSize()
で、
「内部から」決定していくやり方(※「中味」のパーツの
大きさから決定していき、最後に全体の「箱」の大きさが
算出され決定されるやり方)が
window.pack()

http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Window.html#pack()
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/awt/Window.html#pack()

ウインドウのサイズを
「内部レイアウトや
サブコンポーネント(内部のコンポーネント)の情報(※推奨
サイズなど)から」
算出し、設定する。

といったところかな?
---

つまり、ウインドウ自身の大きさを、
window.setSize(640,480)
などと「みずから決定するやりかた」とは対照的なやり方であり、

window.pack()
とすれば、
ウインドウ自...続きを読む

Q○○「という名の」の言葉の意味と使い方を教えて下さい

日常、○○「という名の」という言葉を耳にしますが、
これはどのような意味ですか?
どのような時どのような使い方をするのでしょうか?
意味と使い方を教えて下さい。

あと、使い方の例を挙げて下さると助かります。
・○○「という名の」△△の
 ○○と△△にはそれぞれどのような言葉を入れたら良いのですか?

Aベストアンサー

比喩的に使う場合もある。

用例:平和維持と言う名の侵略
意味:建前は平和維持って言ってるけど○国のやってる事は侵略だ

用例:権利と言う名の束縛
意味:既得の権利を守る為に、自由な行動を取れず束縛を受けている状態

用例:尊厳死と言う名の殺人
意味:尊厳死って言ってもやってる事は人殺しだ

QJavaのGUIプログラミングの質問

 JavaのGUIのプログラミングの質問です。
フレームの上に■や●のようなものを描画して、
描画された■や●を動かすプログラムを作ることは可能でしょうか?

例えば、

   ↑

← ■ →
  
   ↓

矢印方向に直進させたいとき、矢印方向の指示を与えて
■が矢印方向へ動くようなものを作ってみたいと思っています。

Aベストアンサー

可能でしょうか?
可能です。
入門書やネット上などで、JavaのGUIプログラミングについて基礎から勉強してください、
Sunが提供しているSwingチュートリアルの中では、あなたの要求に応えるのは、これかな:
http://java.sun.com/docs/books/tutorial/uiswing/painting/index.html

Q由とするという言葉の使い方 意味

いろいろ検索したのですが
わからないのでどなたかお教えください。

例えば・・・

テストの順位が目標より少し低かったが
今回はこれで由として、次回のテストを頑張ろう。

という使い方は正しい使い方ですか?

また、由とするという言葉の意味もあわせてお教え下さると大変嬉しいです。

宜しくお願いします。

Aベストアンサー

こんにちは。

漢字では「良しとする」と書きます。

下に掲げた辞書記事を読むとわかると思いますが、「よしとする」の意味は、
「もっともなこととして認める」
「満足なものとして認める」
です。

順位が悪いことは、もっともなことでもないし、満足できるものでもありません。
ですから、質問文にある文例は誤りです。
正しい書き方の例としては、
「今回のテストの順位をよしとせず、次回のテストを頑張る。」
「今回のテストの順位をよしとし、次回のテストは頑張らない。」
などがあります。

http://dic.yahoo.co.jp/dsearch?enc=UTF-8&p=%E3%82%88%E3%81%97%E3%81%A8%E3%81%99%E3%82%8B&dtype=0&dname=0na&stype=4&index=23604419350000&pagenum=1

http://dic.yahoo.co.jp/dsearch?enc=UTF-8&p=%E3%82%88%E3%81%97%E3%81%A8%E3%81%99%E3%82%8B&dtype=0&dname=0ss&stype=4&index=120222100000&pagenum=1

http://dic.yahoo.co.jp/dsearch?enc=UTF-8&p=%E3%82%88%E3%81%97%E3%81%A8%E3%81%99%E3%82%8B&dtype=0&dname=0ss&stype=4&index=104537000000&pagenum=1

こんにちは。

漢字では「良しとする」と書きます。

下に掲げた辞書記事を読むとわかると思いますが、「よしとする」の意味は、
「もっともなこととして認める」
「満足なものとして認める」
です。

順位が悪いことは、もっともなことでもないし、満足できるものでもありません。
ですから、質問文にある文例は誤りです。
正しい書き方の例としては、
「今回のテストの順位をよしとせず、次回のテストを頑張る。」
「今回のテストの順位をよしとし、次回のテストは頑張らない。」
などがあります。

http://dic....続きを読む

QJava ボールが動くアニメーション

ボールがウインドウ内を跳ねるプログラムを作っているのですが、ある所でフリーズしてしまいました。

class BallBound implements ActionListener {
BallBound() {
//ウインドウ作成・アクションリスナ登録・メニューバー作成&取り付けなど
}

//アニメーション
public void byoga() {
boolean xvect = true, yvect = true;
loop = true;//グローバル変数

while (loop) {
repaint();
try { Thread.sleep(10); }
catch (InterruptedException e1) { }

if (x <= 0 || x+vx >= frame.getWidth()) {
xvect = !xvect;
}//はみ出たら逆ベクトルへ
if (y <= 0 || y+vy >= frame.getHeight()) {
yvect = !yvect;
}

if (xvect) x += xch;
else x -= xch;
if (yvect) y += ych;
else y -= ych;

}
}

public void actionPerformed(ActionEvent e) {
if(e.getSource() == start) {
if(loop == false) {
byoga();
}
}
if(e.getSource() == stop) {
loop = false;
}
}

protected void paintComponent(Graphics g) {
g.fillOval(x, y, vx, vy);
}
}

という風にactionPerformed()から、JMenuItem startが押された場合にbyoga()を呼び出しているのですが、startのメニューを押した(選んだ)瞬間にフリーズしてしまってタスクマネージャから強制終了せざるを得ない状態になってしまいます。
しかしコンストラクタの末尾からbyoga()を呼び出してみたりmain()から呼び出したりした場合はフリーズせずに起動できます。
これは一体何故なんでしょうか・・・?
どなたか教えてほしいです・・・

ボールがウインドウ内を跳ねるプログラムを作っているのですが、ある所でフリーズしてしまいました。

class BallBound implements ActionListener {
BallBound() {
//ウインドウ作成・アクションリスナ登録・メニューバー作成&取り付けなど
}

//アニメーション
public void byoga() {
boolean xvect = true, yvect = true;
loop = true;//グローバル変数

while (loop) {
repaint();
try { Thread.sleep(10); }
catch (InterruptedException e1) { }

if (x <= 0 || x+vx >= frame.getWidth()...続きを読む

Aベストアンサー

投稿されたプログラムでは、一つのメインスレッド上でビジネスロジックとGUI操作の両方をやろうとしているため、byoga()メソッドがリターンするまでrepaint()は実行されません。そこで、ビジネスロジックを別スレッドにするとともに、本当はGUI操作をSwingUtilities.invokeLater()を経由する等によりGUIのスレッドに礼儀正しく登録委託する必要があります(下のサンプルプログラムは超単純で問題もないのでそれを省略)。ただし、そういう面倒なことをしたのは初期の話で、最近では、単純なアニメのようなものはjavax.swing.Timer, より複雑な(I/Oがからむような)ビジネスロジックはjavax.swing.SwingWorkerを使って実装するのが定石です。
(参考URLはhttp://を省略。)
下のプログラムは、古典的に、明示的に別スレッドを作る解法です:
----------------------------------------------------
/* save and compile as BallBoundX.java */
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class BallBoundX extends JPanel {
int x, y, vx, vy, xch, ych;
boolean loop;
Thread t;

public BallBoundX(){
x = y= 0;
vx = vy = 20;
xch = ych = 5;
setBackground(Color.white);
setPreferredSize(new Dimension(500, 500));
}

public void start(){
if (t == null){
t = new Thread(new Runnable(){
public void run(){
byoga();
}
});
}
t.start();
}

public void stop(){
loop = false;
}

public void byoga() {
boolean xvect = true, yvect = true;
loop = true; //グローバル変数

while (loop) {
if (x < 0 || x + vx > getWidth()) {
xvect = !xvect;
} //はみ出たら逆ベクトルへ
if (y < 0 || y + vy > getHeight()) {
yvect = !yvect;
}

if (xvect){
x += xch;
}
else{
x -= xch;
}
if (yvect){
y += ych;
}
else{
y -= ych;
}

repaint();
try {
Thread.sleep(10);
}
catch (InterruptedException e1) {
e1.printStackTrace();
}
}
t = null;
}

protected void paintComponent(Graphics g) {
super.paintComponent(g);

g.setColor(Color.green);
g.fillOval(x, y, vx, vy);
}

public static void main(String[] args){
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container con = frame.getContentPane();

JMenuBar mb = new JMenuBar();
frame.setJMenuBar(mb);
JMenu menu = new JMenu("実行制御");
final JMenuItem start = new JMenuItem("start");
menu.add(start);
final JMenuItem stop = new JMenuItem("stop");
menu.add(stop);
mb.add(menu);

final BallBoundX bbx = new BallBoundX();
con.add(bbx, BorderLayout.CENTER);
frame.setBounds(100, 100, 500, 500);
frame.setVisible(true);

ActionListener ner = new ActionListener(){
public void actionPerformed(ActionEvent e){
if(e.getSource() == start) {
bbx.start();
}
else if(e.getSource() == stop) {
bbx.stop();
}
}
};
start.addActionListener(ner);
stop.addActionListener(ner);
}
}
-------------------------------------------------

投稿されたプログラムでは、一つのメインスレッド上でビジネスロジックとGUI操作の両方をやろうとしているため、byoga()メソッドがリターンするまでrepaint()は実行されません。そこで、ビジネスロジックを別スレッドにするとともに、本当はGUI操作をSwingUtilities.invokeLater()を経由する等によりGUIのスレッドに礼儀正しく登録委託する必要があります(下のサンプルプログラムは超単純で問題もないのでそれを省略)。ただし、そういう面倒なことをしたのは初期の話で、最近では、単純なアニメのようなものはja...続きを読む

Q「心理」と「心情」の言葉の意味と正しい使い方

国語辞典や広辞苑で言葉の意味をそれぞれ調べたのですが、違いが理解できません。

意味の違いが理解できないために、正しく使い分けができていないような気がします。

恐れ入りますが、それぞれの言葉の意味と正しい使い方を教えてください。
具体的な使い方の用法があれば、とても助かります。

よろしくお願いいたします。

Aベストアンサー

「心理」は「心の動きやありさま。精神の状態」を意味します。もっと言えば「ある行動・思考をする場合、どう気持ちの中で、自己決着したのか」ということを指します。

「心情」は「心の中にある思いや感情」を意味します。もっと言えば「ある行動・思考をした結果、どういった気持ちが形成されるのか」ということを指します。

「犯行時、どういった心理(状態)であったのか・・・」、「あなたの心理は理解できない」など
「被害者の心情を思うと・・・」、「心情的には理解できるが・・・」など
のように使います。

QJava:クラスをたくさん使ったプログラミング?

Java言語勉強中のものです。
Eclipseをつかっています。

初心者ですので、易しい言葉でご回答いただければ幸いです。

Javaの基礎についてひととおり勉強しました。
オブジェクト指向についても、だいたい・・なんとなくは理解できていると思います。

ただ、自分で作成するときに、
うまくオブジェクト指向を取り入れたプログラミングができません。

なんだかあっちこっちのものを呼び出してきてとてもややこしいです。
クラスがたくさんつかわれているプログラムは、
ほかの人がつくったプログラムをなんとかがんばって読む、というのが精一杯です。
自分ではとても思いつかない構造ばかりです。

あっちこっちからよんできているので、図やらリストやらを書いて
本当に「なんとか」理解できた、というレベルです。
クラスが5個以上になると正直もう嫌だってなります。。実用レベルにはまだまだ至っていません。

本当の意味でオブジェクト指向を理解できていないのかもしれません。

どうすればそういった、オブジェクト指向をとりいれたプログラムが書けるようになるのでしょうか?
いろんなプログラムを見る、数をこなすことでしょうか?

何かおすすめの参考書や、
「こういう考え方をすれば・・・」というものがありましたら教えてください。
よろしくお願いいたします。

Java言語勉強中のものです。
Eclipseをつかっています。

初心者ですので、易しい言葉でご回答いただければ幸いです。

Javaの基礎についてひととおり勉強しました。
オブジェクト指向についても、だいたい・・なんとなくは理解できていると思います。

ただ、自分で作成するときに、
うまくオブジェクト指向を取り入れたプログラミングができません。

なんだかあっちこっちのものを呼び出してきてとてもややこしいです。
クラスがたくさんつかわれているプログラムは、
ほかの人がつくったプログラムをなんとか...続きを読む

Aベストアンサー

オブジェクト指向には定石があります。
それが「デザインパターン」です。

いわゆるGoFによる23個のデザインパターンというのが有名ですが、全てを習得するのは容易ではありません。
が、すぐに実用できるようなパターンもありますので、調べてみてはいかがでしょうか。


>何かおすすめの参考書

オススメかどうかは分かりませんが、今まで私が読んだことのある本で関連のものを挙げておきます。

・オブジェクト指向でなぜつくるのか
オブジェクト指向についての入門書といったところでしょうか。
うろ覚えですが、既存の手続き型言語に比べて、オブジェクト指向の何が嬉しいのか、といったことが書かれていたような気がします。

・独習デザインパターン
GoFのデザインパターンについて、クラス図とC++によるサンプルコードなどを使って解説されています。
C++が良くわからなくても、Javaが読み書きできるのであれば、おおよそ問題なく読めるかと思います。


>「こういう考え方をすれば・・・」というものがありましたら教えてください。

少しオブジェクト指向の言語に慣れてきたのであれば、逆にCのような手続き型言語をやってみると、オブジェクト指向だったらこうできるのに…みたいな部分が実感できるかもしれませんね。


>いろんなプログラムを見る、数をこなすことでしょうか?

これは一理あります。
Javaのライブラリなどは、オブジェクト指向のお手本のようなものですので、デザインパターンを学ぶのと同時に、どういうところでそれが使われているのか調べてみると良いかもしれません。。

オブジェクト指向には定石があります。
それが「デザインパターン」です。

いわゆるGoFによる23個のデザインパターンというのが有名ですが、全てを習得するのは容易ではありません。
が、すぐに実用できるようなパターンもありますので、調べてみてはいかがでしょうか。


>何かおすすめの参考書

オススメかどうかは分かりませんが、今まで私が読んだことのある本で関連のものを挙げておきます。

・オブジェクト指向でなぜつくるのか
オブジェクト指向についての入門書といったところでしょうか。
うろ覚えで...続きを読む


人気Q&Aランキング

おすすめ情報