- PR -

JScrollPaneとJSplitPaneの併用について。

投稿者投稿内容
KDS
常連さん
会議室デビュー日: 2005/07/15
投稿数: 38
投稿日時: 2006-01-20 20:01
何度も同じプログラムの質問ですいません。
また質問させて頂きます。

JSplitPaneを使い画面を右と左に2分割して、
左側の画面は画像を読み込み、
画像のサイズに従いスクロールペインを使いたいのです。

コード:

JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
splitPane.setLeftComponent(createPanel1());
splitPane.setRightComponent(createPanel2());
splitPane.setDividerSize(5);
splitPane.setDividerLocation(500);
Container content = this.getContentPane();
content.add(splitPane, BorderLayout.CENTER);

JScrollPane jScrollPane1 = new JScrollPane();
content.add(jScrollPane1,BorderLayout.CENTER);
JScrollPane1.getViewport().add(createPanel1());
createPanel1().add(jScrollPane1);




左側の処理はこのようにしています。

コード:

private JPanel createPanel1() {
final JPanel panel = new JPanel() {
public void paintComponent(Graphics g) {
super.paintComponent(g);
((Graphics2D) g).drawImage(image, 0, 0, this);
}
};
image = new BufferedImage(600, 500, BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D) image.getGraphics();
g.setColor(panel.getBackground());
g.fillRect(0, 0, 600, 500);
g.dispose();

panel.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
省略
}
});

panel.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
       省略
}
});
return panel;
}



何方か分かる方いらっしゃいましたら、
よろしくお願いします。

[ メッセージ編集済み 編集者: KDS 編集日時 2006-01-21 16:15 ]

[ メッセージ編集済み 編集者: KDS 編集日時 2006-01-21 16:16 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-21 03:30
何が問題となっているのでしょうか?
KDS
常連さん
会議室デビュー日: 2005/07/15
投稿数: 38
投稿日時: 2006-01-21 16:14
インギさん、ありがとうございます。

JSplitPaneを使い画面を右と左に2分割して、
左側の画面は画像を読み込み、
画像のサイズに従いスクロールペインを使いたいのです。

この場合に画像を読み込むというのは、
データをFileChooserで毎回指定し、
その画像サイズに合わせて、スクロールペインを出したり出さなかったりしたいのです。

現状では、どんなサイズの画像でもスクロールペインを出す事が出来ないのです。
一応createPanel1()という場所で細かい設定をしていて、(下のコード)
JSplitPaneの設定はinitの中で設定しています。(上のコード)
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-21 16:39
コードはよく見てないのですが、JSplitPaneを使わない場合はうまくスクロールバーをだせているということでしょうか?
#つまり JSplitPaneに依存する問題かどうか?
KDS
常連さん
会議室デビュー日: 2005/07/15
投稿数: 38
投稿日時: 2006-01-22 00:23
申し訳ないです。
JSplitPaneを使わずに作ったみたのですが、
やはり結果は同じくスクロールを出す事ができませんでした。

なので、JSplitPaneに依存するかどうかはまた別でした。。
すいませんでした。

FileメニューのOpenよりJFileChooserにて画像を選択し、
画像を画面に表示させる。
そしてその際に画像のサイズに合わせてスクロールバーを
出したり出さなかったりしたいです。

コードはこのようにしています。
おそらく、画像を読み込んだ際にその画像をJScrollPaneへ
貼り付けると良いと思うのですが、
なかなか難しくて。。

申し訳ないですがご教授下さい。


[ メッセージ編集済み 編集者: KDS 編集日時 2006-01-26 00:53 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-22 11:42
プログラムが複雑だから「JSplitPaneを使っているのが問題なんだ」、とか勘違いしてしまうわけですからまず、現象を再現できる最小限のプログラムを作ってみましょう。
ファイルダイアログで選択して画像を読み込んで・・・とかではなく 改行だらけの JTextArea を配置するとか。

JScrollPane を使ってスクロールバーを表示するプログラムなんてそれこそ腐るほどサンプルがありますから、それと、シンプルにした手元のプログラムと見比べると良いかと思います。

[ メッセージ編集済み 編集者: インギ 編集日時 2006-01-22 11:44 ]

[ メッセージ編集済み 編集者: インギ 編集日時 2006-01-22 11:44 ]
KDS
常連さん
会議室デビュー日: 2005/07/15
投稿数: 38
投稿日時: 2006-01-22 23:19
インギさん。
レス、ありがとうございます。
分かりました。

もう少し簡単なプログラムから考えてみる事にします。
分からなくなったらまた質問させていただきたいと思いますので、
よろしくお願いします。
KDS
常連さん
会議室デビュー日: 2005/07/15
投稿数: 38
投稿日時: 2006-01-26 02:24
インギさんの言う通り簡単なプログラムを作ってみたら、
問題点が分かりました。

やはりJSplitPaneとJScrollPaneの問題でした。

コード:

private JPanel createPanel1() {
省略
}


と、しており、
JSplitPaneで設定をしている場所とちがうところで
createPanel1()の設定をしているので、
いまいち下のコードを追加する場所が分からないのです。。。
コード:

JLabel label = new JLabel(new ImageIcon(image));
JScrollPane scrollPane = new JScrollPane(label);
panel.add(scrollPane);


としていて、
ImageIconのimageというのはBufferedImageを使っていて、
createPanel1()の中で画像の編集の処理させています。


JSplitPaneで設定をしているところで上のコードを追加しても
createPanel1()の中で上のコードを追加してもエラーが出ます。

何方かご教授いただけないでしょうか。

エラー。
コード:

Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at Mtis4.init(Mtis4.java:57)
at Mtis4.main(Mtis4.java:39)



[ メッセージ編集済み 編集者: KDS 編集日時 2006-01-26 02:30 ]

スキルアップ/キャリアアップ(JOB@IT)