dポイントプレゼントキャンペーン実施中!

『長方形をあらかじめ置き、、縮小、拡大のボタンを押すことで
 縦横を1/1.05倍に縮小できるようにする』
という問題が教科書にあり、拡大、縮小ボタンを作るまではできたのですがそれ以降がうまく考えることができません。

//<applet code= "Counter3.class" width=300 height=150></applet>
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Counter3 extends Applet
implements ActionListener {
Font font;
Button kakudaiButton, syukushoButton;

public void init() {
font = new Font("Serif", Font.BOLD, 72);

kakudaiButton = new Button("拡大");
kakudaiButton.addActionListener(this);
add(kakudaiButton);

syukushoButton = new Button("縮小");
syukushoButton.addActionListener(this);
add(syukushoButton);


}

public void paint(Graphics g) {

g.drawOval();

}

public void actionPerformed(ActionEvent e) {
if (e.getSource() == kakudaiButton) {
;
} else if (e.getSource() == syukushoButton) {
;
}
repaint();
}
}

A 回答 (1件)

とりあえず、用意されたコンポーネントを使うものと


使わないものの2通りを作ってみました。
ついでに自分はAWT,Swing否定派です。(自由にできないから)

まずは、質問どおりAWTで書いたものを貼ります

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ChangeSize extends Applet{
//widthは長方形の幅,hightは長方形の高さ
int width=200,hight=100;
//ダブルバッファーのため(repaint時のちらつきを抑えます)
Graphics gr;
Image img;
Panel panel=new Panel();
Button reduction=new Button("縮小");
Button expansion=new Button("拡大");
public void init(){
setSize(400,250);
//ダブルバッファー
img=createImage(400,250);
gr=img.getGraphics();
//Applet本体のレイアウトをボーダーにセット
setLayout(new BorderLayout());
//panelのレイアウトをグリッドにセット
panel.setLayout(new GridLayout());
//reductionにアクションリスナを追加して
//内部クラスで引数を渡しています
reduction.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
reductionActionPerformed(evt);
}
});
//panelにreductionを追加
panel.add(reduction);
expansion.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
expansinActionPerformed(evt);
}
});
panel.add(expansion);
//panelを南の位置に追加(ボーダーレイアウトの方式)
add(panel,BorderLayout.SOUTH);
}
//reductionのボタンの状態が変化(押されたら)したらイベント発生
private void reductionActionPerformed(ActionEvent evt){
//縮小しすぎて拡大できなくなるのを防ぐためのif文
if(hight>25&&width>50){
//int型だと計算時の小数点が反映されないため正確な数字がでない
//なので、double型で計算した後にint型でキャストしてます
hight=(int)(hight/1.05);
width=(int)(width/1.05);
//再描画処理
repaint();
}
}
private void expansinActionPerformed(ActionEvent evt){
if(hight<200&&width<400){
hight=(int)(hight*1.05);
width=(int)(width*1.05);
repaint();
}
}
public void paint(Graphics g){
g.fillRect(100-hight/2,200-width/2,width,hight);
}
}

次にコンポーネントを使わないほうを貼ります
今回のデザインは思いっきり手を抜いてますが、イメージを描画すればゲーム風にもできます。

import java.applet.Applet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class ChangeSize2 extends Applet implements MouseListener{
int width=200,hight=100;
//push1は縮小ボタンが押されたか?
//push2は拡大ボタンが押されたか?
boolean push1=false,push2=false;
Graphics gr;
Image img;
public void init(){
setSize(400,250);
img=createImage(400,250);
gr=img.getGraphics();
addMouseListener(this);
setFont(new Font("MS UI Gothic",Font.BOLD,30));
}
public void paint(Graphics g){
g.fillRect(100-hight/2,200-width/2,width,hight);
//縮小ボタンが押されたらボタンを黄色に
//押されてないときは青色に
if(push1==false)g.setColor(new Color(150,150,250));
else g.setColor(new Color(250,250,150));
//縮小ボタンの描画
g.fillRect(50,210,100,30);
if(push2==false)g.setColor(new Color(150,150,250));
else g.setColor(new Color(250,250,150));
//拡大ボタンの描画
g.fillRect(250,210,100,30);
g.setColor(new Color(0,0,0));
g.drawString("縮小",70,235);
g.drawString("拡大",270,235);
}
public void mouseClicked(MouseEvent e){}
public void mousePressed(MouseEvent e){
//クリックしたさいにマウスがボタン上にあるか?
if(e.getX()>=50&&e.getX()<=150&&e.getY()>=210&&e.getY()<=240){
hight=(int)(hight/1.05);
width=(int)(width/1.05);
//ボタンが押されてる間はボタンは黄色
push1=true;
repaint();
}
if(e.getX()>=250&&e.getX()<=350&&e.getY()>=210&&e.getY()<=240){
hight=(int)(hight*1.05);
width=(int)(width*1.05);
push2=true;
repaint();
}
}
public void mouseReleased(MouseEvent e){
//ボタンが離されたらボタンの色が青に戻る
push1=false;
push2=false;
repaint();
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
}
    • good
    • 0

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