『長方形をあらかじめ置き、、縮小、拡大のボタンを押すことで
縦横を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件)
- 最新から表示
- 回答順に表示
No.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){}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- その他(プログラミング・Web制作) ボールの動きがスムーズに動いてかつ目盛り線描画を維持するためには 4 2023/05/31 10:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
setAttribute(String, int)は適...
-
eclipseに記述したjavaファイル...
-
「例外 *** は対応する try 文...
-
Selenium IDEでexportしたコー...
-
javaにおいてコンパイルをする...
-
<forEach> 内で供給された "ite...
-
ServletからServlet
-
SWTで規定のプラウザでリンクを...
-
JAVAのアプレットの文の改行方法。
-
メニューバーのプログラム
-
透過GIFの判定の仕方ありますか?
-
do while文のエラー??
-
【java】検索フォームの検索結...
-
フレームの×ボタンを押しても閉...
-
C言語のポインターに関する警告
-
JSPやサーブレットでSystem.out...
-
ループ処理の際、最後だけ","を...
-
ORA-01858: 数値を指定する箇所...
-
[JAVA]try 内の変数を外で!?
-
オブジェクトの中のプロパティ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
<forEach> 内で供給された "ite...
-
「例外 *** は対応する try 文...
-
importするには java.io.*; imp...
-
Javaを使ってデジタル時計を作...
-
setAttribute(String, int)は適...
-
シャットダウンフックが呼ばれない
-
干支の計算で。。。
-
Selenium IDEでexportしたコー...
-
ColabでのPytorchのエラー
-
文字列を数式に
-
【JAVAエラー】互換性のない型...
-
importとextendsの用い方の違い...
-
HttpClientについて
-
ActionForm form にnullが入っ...
-
Java3Dで横置き円筒体の円筒中...
-
javaで画像を回転縮小
-
(急募)Javaじゃんけんゲームで
-
java初心者です。座標取得と図...
-
画面遷移時のデータ遷移について
おすすめ情報