ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュの画像の表示

  • mixiチェック
  • このエントリーをはてなブックマークに追加
画像を直接指定し表示、スクロールバーや機能付きのボタンを設置したいのですが
書き方が解りません、どうかご教授ください
AWTを使っています

画像読込→画面解像度読込→解像度に合わしてウィンドゥ表示→画像表示
マウスイベントでクリックすると閉じる機能までは付けました

これに以下の機能を付けたいです

・上下左右に画像を見れるようにスクロールバーの設置

・画像の拡大縮小が出来るボタンの設置
(画像のサイズが小さいもので3000*1000、大きいもので25000*4000とかになるので)

・1つ目の画像を表示した、あとに2つ目の画像を表示するようにする
(1つ目の画像を表示するウィンドゥが閉じるのを確認して、2つ目が開くようにしたいです)

・マウスイベントは消去し、右上の閉じるを押すと閉じるようにしたいです

稚拙ですが自分が今まで作ったプログラムを貼っておきます

どうか宜しくお願いします

コメント(7)

package test;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.ImageObserver;

public class Giftest extends Frame {
/**
*
*/
private static final long serialVersionUID = 1L;
private Image img = null;
private boolean anim = true;

public static void main(String[] args){
new Giftest().setVisible(true);
}

public Giftest(){
Toolkit tk = getToolkit();
ScrollPane sp = new ScrollPane();
Dimension dim;
Panel pl = new Panel();
dim = tk.getScreenSize();
setSize(dim.width,dim.height);

img = Toolkit.getDefaultToolkit().createImage("outneato.gif");

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
this.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent ev){
System.exit(0);
}
});
}

public void update(Graphics g){
paint(g);
}

public void paint(Graphics g){
g.drawImage(img,10,50,2907,1117,this);
}

public boolean imageUpdate(Image im,int flag,int x,int y,int w,int h){
super.imageUpdate(im,flag,x,y,w,h);
if ((flag & ImageObserver.FRAMEBITS) != 0){
return anim;
}
return true;
}
}
なんか、あまりにもいろいろおかしすぎて、どこから指摘すればいいのやら・・・
>あやめさん
すいません、知り合いから画像を表示できるプログラムをもらって
それを自分なりに改良した次第です@@;
とりあえず・・・・おおざっぱに修正してみました。
かなり適当ですが・・・久々にAWTいじったのでどこかおかしいかもしれません。
(いつもSWINGばかりなので)

package test;

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

public class Giftest extends Frame {
/** serialVersionUID */
private static final long serialVersionUID = 1L;

/** イメージを表示するパネル */
private ImagePanel imagePanel;
/** スクロールパネル */
private ScrollPane scrollPane;

/**
* @param args
*/
public static void main(String[] args) {
new Giftest().setVisible(true);
}

/**
* コンストラクタ
*/
public Giftest() {
super("テスト");

// 配置方法を設定
setLayout(new BorderLayout());

// ボタンを配置するPanelを用意
Panel buttonPanel = new Panel();
// ボタンを配置するPanelを配置(配置場所は上部)
add(buttonPanel, BorderLayout.NORTH);

// 拡大ボタン生成
Button buttonZoomIn = new Button("拡大");
// ボタンパネルに拡大ボタンを配置
buttonPanel.add(buttonZoomIn);
buttonZoomIn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
imagePanel.zoomIn();
validate();
}
});
// 縮小ボタン生成
Button buttonZoomOut = new Button("縮小");
// ボタンパネルに縮小ボタンを配置
buttonPanel.add(buttonZoomOut);
buttonZoomOut.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
imagePanel.zoomOut();
validate();
}
});

// ImagePanelを生成
imagePanel = new ImagePanel(Toolkit.getDefaultToolkit().createImage("outneato.gif"));
// ScrollPaneを生成
scrollPane = new ScrollPane();
// ScrollPaneの上にImagePanelを配置
scrollPane.add(imagePanel);
// ScrollPaneをFrameに配置(配置場所は真ん中)
add(scrollPane, BorderLayout.CENTER);
// FrameのサイズをScreenSizeに変更
setSize(getToolkit().getScreenSize());

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
imagePanel.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent ev){
System.exit(0);
}
});
}

/**
* Imageを表示するPanelクラス
*/
private class ImagePanel extends Panel {
/** serialVersionUID */
private static final long serialVersionUID = 2L;
/** 表示するImage */
private Image image;

private int ratio = 100;
/**
* デフォルトコンストラクタ
*/
ImagePanel(Image image) {
this.image = image;
}
/**
* 新たに表示するImageを設定します.
* @param image 表示するImage
*/
public void setImage(Image image) {
this.image = image;
repaint();
}

public void zoomIn() {
if (ratio < 3200) {
ratio *= 2;
Dimension dim = new Dimension(image.getWidth(this) * ratio / 100, image.getHeight(this) * ratio / 100);
setPreferredSize(dim);
setSize(dim);
}
}
public void zoomOut() {
if (ratio > 1) {
ratio /= 2;
Dimension dim = new Dimension(image.getWidth(this) * ratio / 100, image.getHeight(this) * ratio / 100);
setPreferredSize(dim);
setSize(dim);
}
}
@Override
public void paint(Graphics g) {
Dimension dim = getPreferredSize();
g.drawImage(image, 0, 0, dim.width, dim.height, this);
}
@Override
public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int h) {
if ((ALLBITS & infoflags) != 0) {
// 読み込み終わり
// PanelのサイズとImageのサイズに制限する(setPreferredSizeを設定しないとScrollバーが正常に表示されません)
setPreferredSize(new Dimension(image.getWidth(this), image.getHeight(this)));
}
return super.imageUpdate(img, infoflags, x, y, w, h);
}
}
}
>あやめさん
どうもありがとうございます
作成していただいたプログラムを見ていると
自分が作ったプログラムがどれだけ稚拙なものかと思うと恥ずかしい限りです

あと一点質問よろしいでしょうか?

作成していただいたプログラムではスクロールバーは一箇所のみですが
もう一つつけることは可能なんでしょうか?

スクロールバーを下段につけて左右にもスクロールできるようにしたいので・・・・・

何度も差し出がましいですが宜しければ教えてください
宜しくお願いします
スクロールバーの設定はデフォルトのままなので、
拡大していって画像がウィンドウ幅を超えると横スクロールバーも表示されるはずです。
もしくは、ウィンドウのサイズを画像よりも小さくなるまで小さくしても横スクロールバーが表示されるはずです。

設定としては
・SCROLLBARS_ALWAYS
 スクロールペインと子の大きさにかかわらず、常に水平/垂直スクロールバーを表示することを示します。
・SCROLLBARS_AS_NEEDED
 子の大きさがスクロールペインの水平/垂直方向の大きさを超えるときにだけ、水平/垂直スクロールバーを表示することを示します。
・SCROLLBARS_NEVER
 スクロールペインと子の大きさにかかわらず、常に水平/垂直スクロールバーを表示しないことを示します。
の3種類があります。

スクロールバーを生成している
scrollPane = new ScrollPane();
を
scrollPane = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
のように設定します。

awtのScrollPaneは、縦と横で個別に設定できないのでちょっと使い勝手が・・・
>あやめさん

何度もお答えいただき有難うございました@@;

今回は本当に助かりました、感謝感謝!!

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング