解決済み

JAVAのプロフラミングについて

  • すぐに回答を!
  • 質問No.5373177
  • 閲覧数120
  • ありがとう数0
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 0% (2/377)

□、○、△のボタンがあり、それぞれのボタンについて
一回押すと、その押したボタンの図形を2個描き、
押すたびに永久的に増えていくというようなプログラム
を作りたいのですが、ここからどのようにすればいいのか教えてください。

import java.awt.*;
import java.applet.*;
import java.awt.event.*;



public class kadaiApplet232 extends Applet implements ActionListener {

int square = 0;
int circle = 0;
int triangle = 0;
Button squareButton, circleButton,triangleButton;


public void init(){

squareButton = new Button("□");
squareButton.addActionListener(this);
add(squareButton);


circleButton = new Button("○");
circleButton.addActionListener(this);
add(circleButton);

triangleButton = new Button("△");
triangleButton.addActionListener(this);
add(triangleButton);
}


public void paint(Graphics g){
if(){
g.drawRect(30, 30, square, square);
}
if(){
g.drawOval(60,30,circle,circle);
}
if(){
g.drawLine(90+(int)(triangle/2),30,90,30+triangle);
g.drawLine(90,30+triangle,90+triangle,30+triangle);
g.drawLine(90+triangle,30+triangle,90+(int)(triangle/2),30);
}
}


public void actionPerformed(ActionEvent e){

if ( e.getSource() == squareButton){
square = 30;
}

else if ( e.getSource() == circleButton){
circle = 30;
}
else if (e.getSource() == triangleButton){

triangle = 30;
}


repaint();
}
}

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

  • 回答No.1

ベストアンサー率 46% (6/13)

int RE=0;//どこからでもアクセスできる変数を用意
public void paint(Graphics g){
//2回描く。
for(i=0;i<RE;i++){
g.drawRect(30, 30+square*(i*2), square, square);
g.drawRect(30, 30+square*(i*2+1), square, square);
}
}
public void actionPerformed(ActionEvent e){

if ( e.getSource() == squareButton){
square = 30;
RE++; //□ボタンが押された回数だけREを増やす
}
}

□だけ書いて見ました。
補足コメント
final2909

お礼率 0% (2/377)

三角形がうまく表示できずに困っています。
また、表示したい図形のボタンを押すと他の図形まで
描かれてしまいます。int square = 0;
int circle = 0;
int triangle = 0;
int RE = 0;
int i;

Button squareButton, circleButton,triangleButton; // (1)

// init メソッド
public void init(){

squareButton = new Button("□");
squareButton.addActionListener(this);
add(squareButton);

// (2)
circleButton = new Button("○"); // (i)
circleButton.addActionListener(this); // (ii)
add(circleButton); // (iii)

triangleButton = new Button("△");
triangleButton.addActionListener(this);
add(triangleButton);
}

// paint メソッド
public void paint(Graphics g){
for(i=0;i<RE;i++){

g.drawRect(30,30+square*(i*2),square,square);
g.drawRect(30,30+square*(i*2+1),square,square);
g.drawOval(90,30+circle*(i*2),circle,circle);
g.drawOval(90,30+circle*(i*2+1),circle,circle);
g.drawLine(150+(triangle/2),30+triangle*(i*2),150,30+triangle*(i*2));
g.drawLine(150,(30+triangle)+(triangle+(i*2)),150+triangle,(30+triangle)+(triangle+(i*2)));
g.drawLine(150+triangle,30+triangle*(i*2),150+(triangle/2),30+2*triangle*(i*2));
g.drawLine(150+(triangle/2),60+triangle*(i*2+1),150,60+triangle);
g.drawLine(150,(60+triangle)+(triangle*(i*2+1)),150+triangle,60+triangle);
g.drawLine(150+triangle,(60+triangle)+triangle*(i*2+1),150+(triangle/2),60);
}
}
// actionPerformed メソッド
public void actionPerformed(ActionEvent e){
// "拡大"が押されたとき
if ( e.getSource() == squareButton){ // (3)
square = 30;

RE++;


}
// "縮小"が押されたとき
else if ( e.getSource() == circleButton){
circle = 30;


}
else if (e.getSource() == triangleButton){
triangle = 30;
}

// 再描画(paintメソッドを実行する)

repaint();
}
}
投稿日時 - 2009-10-17 12:30:15
感謝経済、優待交換9月20日スタート

その他の回答 (全2件)

  • 回答No.3

ベストアンサー率 65% (25/38)

> また、if文は、つけてみたのですが、
> 実行してみたら、エラーになってしまいました。

あのですね、

> if(){

このまま書いたらそりゃコンパイルエラーになりますよ。if文をどう書くかも勉強していないのですか? めちゃくちゃ基礎ですよ?
この問題は、ifのカッコの中に必要な条件判定を入れる、という穴埋め問題だと思います。それを「if()と書いたらエラーになった」というレベルの質問をしているようでは、回答者側は一からあなたにJavaを教えるか、答えを丸ごと書いてあげなければいけません。どちらも無料で他人に頼むことではありません。少なくとも「質問と回答」というレベルのやりとりでは、この問題は解決しませんよ。

悪いことは言わないので、Javaを一から勉強してください。まったく基礎が分かっていない人に答えだけ提示しても無駄なので。if文の書き方なんて、勉強本の最初の方に載っていると思いますよ。
  • 回答No.2

ベストアンサー率 65% (25/38)

クラス名といいif文の条件がすっぽり抜けていることといい、学校の課題でしょうか? もしそうなら本人のためにならないので直接の回答はせず、ヒントに留めます。

> 三角形がうまく表示できずに困っています。

最初はg.drawLine()が3行(三角形を成す3線)だったのに、なぜ6行に増えたのでしょうか? また三角形の頂点は3つのはずですが、g.drawLine()の引数を見ていくと3点以上あるようです。3点が正しく結ばれなければ三角形は表示できませんよね。

> また、表示したい図形のボタンを押すと他の図形まで
> 描かれてしまいます。

最初はif文で「ある条件で三角形を描く」という構造になっていたのに、なぜそれを削除してしまったのですか? 条件分岐がないから「常に全部描く」ことになってしまっているのです。

最初のソースコードの各行の意味を、まずきちんと把握してみてください。
補足コメント
final2909

お礼率 0% (2/377)

三角形は、2つ描くプログラムです。
最初は、わかりやすくするため1つにしました。

また、if文は、つけてみたのですが、
実行してみたら、エラーになってしまいました。
public void paint(Graphics g){
for(i=0;i<RE;i++){
if(){
g.drawRect(30,30+square*(i*2),square,square);
g.drawRect(30,30+square*(i*2+1),square,square);
}
if(){
g.drawOval(90,30+circle*(i*2),circle,circle);
g.drawOval(90,30+circle*(i*2+1),circle,circle);
}
if(){
g.drawLine(150+(triangle/2),30+triangle*(i*2),150,30+triangle*(i*2));
g.drawLine(150,(30+triangle)+(triangle+(i*2)),150+triangle,(30+triangle)+(triangle+(i*2)));
g.drawLine(150+triangle,30+triangle*(i*2),150+(triangle/2),30+2*triangle*(i*2));
g.drawLine(150+(triangle/2),60+triangle*(i*2+1),150,60+triangle);
g.drawLine(150,(60+triangle)+(triangle*(i*2+1)),150+triangle,60+triangle);
g.drawLine(150+triangle,(60+triangle)+triangle*(i*2+1),150+(triangle/2),60);
}
}
}

public void actionPerformed(ActionEvent e){

if ( e.getSource() == squareButton){ // (3)
square = 30;

RE++;


}

else if ( e.getSource() == circleButton){
circle = 30;


}
else if (e.getSource() == triangleButton){
triangle = 30;
}



repaint();
}
}
投稿日時 - 2009-10-17 17:42:07
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ