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();
}
}
}
No.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がない、などなど。そのあたりはご自身でチェックしてください。
返信ありがとうございます。
このコートはもちろん省略してあります。長すぎて800文字を越して投稿できなかったので・・・。
省略してはいけない部分を省略してしまったみたいですみません。(結構初心者なので・・・
省略前のは多分(chenge_size以外)エラーが出てないので、そこら辺は大丈夫だと思います。
早速やってみると、ちゃんとできました。
僕は指摘されたとおり、setPreferredSizeのところがわかってないみたいですのでこれからsetPreferredSizeについて勉強します。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java java final 1 2022/06/10 22:49
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[C#.net]スレッド化された別フ...
-
Javaでパラパラアニメを作成す...
-
大量のデータを読み込んで表示...
-
数独の問題作成
-
ボタンのイベントで異なるウィ...
-
【java】座標の値をテキストフ...
-
Thread.sleepのInterruptedExce...
-
Junitテストでvoid戻り値メッソ...
-
GetDIBits関数の使い方について
-
C#で、あるクラスのメンバーす...
-
javaアプレット repaintのタイ...
-
C# DataGridView列カスタマイズ
-
【javaアプレット】スクロール...
-
C# 半角カナの文字化けについて
-
ペイントソフトを作っているの...
-
二分探索木の要素の数を数える...
-
Processingでマウスクリックで...
-
struts2のchainで値の受け渡し...
-
C# タスク非表示でタイトルバー...
-
JWindow、JFrameでモーダル化の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
ボタンの複数割り当てについて
-
C#で、あるクラスのメンバーす...
-
Junitテストでvoid戻り値メッソ...
-
C#でのWNetAddConnection3の使...
-
C# 矢印キーの取得
-
Thread.sleepのInterruptedExce...
-
unityでのC++エラーの原因がわ...
-
C#で別のFormへ複数の値を返そ...
-
C# visibleプロパティをfalseに...
-
エンターキーを押すとOKボタン...
-
Processingでマウスクリックで...
-
[C#.net]スレッド化された別フ...
-
C#でキーイベントが発生しない...
-
C# DataGridView列カスタマイズ
-
【C#】ソースコードをファイル...
-
LVM_SETITEMSTATEでListViewの...
-
GetDIBits関数の使い方について
-
未割り当てのローカル変数
-
C# MouseHoverを何度も呼ぶには
おすすめ情報