こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

□、○、△のボタンがあり、それぞれのボタンについて
一回押すと、その押したボタンの図形を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();
}
}

投稿日時 - 2009-10-17 02:15:56

QNo.5373177

すぐに回答ほしいです

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

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を増やす
}
}

□だけ書いて見ました。

投稿日時 - 2009-10-17 05:53:53

補足

三角形がうまく表示できずに困っています。
また、表示したい図形のボタンを押すと他の図形まで
描かれてしまいます。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

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

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

あのですね、

> if(){

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

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

投稿日時 - 2009-10-22 17:54:25

ANo.2

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

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

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

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

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

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

投稿日時 - 2009-10-17 14:03:19

補足

三角形は、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

あなたにオススメの質問