プロが教える店舗&オフィスのセキュリティ対策術

JPaneに絵をかいて、画面に表示するプログラムを作ろうと思ったんですが、拡大・縮小の機能を入れようとしたところ、JPanelの大きさのせいなのかJScrollPaneのスクロールバーが最後の絵の部分まで行きませんでした。
そこで、JPaneの大きさを絵の大きさに合わせて変更するようにしようと思ったのですが、してみたところエラーが出てきてわからなくなってしまいました。
誰か対処法を教えてください。プログラムは下に貼っときます。

----------------------------------

public class Hyou extends JFrame {
public Hyou() {
// タイトルを設定
setTitle("");
// メインパネルを作成してフレームに追加
MainPanel panel = new MainPanel();
JScrollPane spanel = new JScrollPane(panel,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
Container contentPane = getContentPane();
contentPane.add(spanel);
pack();
}
}

class MainPanel extends JPanel implements MouseListener,ActionListener {
static int WIDTH = l * 100 + (k2 * 2);
static int HEIGHT = h * 100 + (k1 * 2);
setPreferredSize(new Dimension(WIDTH, HEIGHT));
JButton bt3 = new JButton("拡大");
bt3.addActionListener(this);
bt3.setActionCommand("big");
bt3.setBounds(new Rectangle(160,20,50,30));
this.add(bt3);
}

//大きさ変更
void chenge_size(){
MainPanel.setBounds(new Dimension(WIDTH,HEIGHT));
}

public void actionPerformed(ActionEvent e){
String command_name = e.getActionCommand();
if(command_name.equals("big")==true){

WIDTH *= 2;
repaint();
chenge_size();
}
}
}

A 回答 (1件)

とりあえず、掲載されていたコードでは細かなエラーが多すぎて・・。



大きさを変更するchenge_sizeについては、例えばですがこんな感じで対応すればうまくいくと思います。

void chenge_size(){
this.setPreferredSize(new Dimension(WIDTH,HEIGHT));
invalidate(); // 未Layout状態にする
getParent().validate(); // 組み込み元コンテナに再Layoutを要求する
}

ちょっと、setPreferredSizeの意味と働きがよくわかっていないのかも知れませんね。JScrollPaneに組み込まれたJPanelの大きさを変更したければ、setPreferredSizeを変更します。ただし、これだけでは再レイアウトはされないので、再レイアウトを何らかの方法で行わせる必要があります。(ここではinvalidate/validateしていますが、他にもやりかたはあります)

ところで、作成したコードは、これですべてですか? それともいくらか省略しています? 省略してあるなら話は別ですが、これですべてだとしたら他にもいろいろ問題があります。MouseListenerのメソッドがない、mainがない、などなど。そのあたりはご自身でチェックしてください。
    • good
    • 0
この回答へのお礼

返信ありがとうございます。
このコートはもちろん省略してあります。長すぎて800文字を越して投稿できなかったので・・・。
省略してはいけない部分を省略してしまったみたいですみません。(結構初心者なので・・・
省略前のは多分(chenge_size以外)エラーが出てないので、そこら辺は大丈夫だと思います。

早速やってみると、ちゃんとできました。
僕は指摘されたとおり、setPreferredSizeのところがわかってないみたいですのでこれからsetPreferredSizeについて勉強します。
ありがとうございました。

お礼日時:2005/07/12 18:15

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