まったくの初心者ですが、java入門書を参考にしながらjavaアプリケーションを作成しています。的外れなことをしているのかもしれませんが、JScrollPane(パネル名) ではスクロールバーをつくれないのでしょうか?
JScrollPane(JLabel名)にした場合はうまくうごくのですが、JScrollPane(パネル名)にした場合にスクロールバーが付いて(線の様になっている?)くれません。
縦軸に機種、横軸に日付を配置して、小さいグラフをマトリックス状に
ならべたいのです。日付の期間、または選択した機種により表示するグラフがパネル表示領域を超えてしまいます。
素人なのでむずかしいことはわかりません。わかりやすくおしえていただけないでしょうか。
No.1ベストアンサー
- 回答日時:
JPanel 内にJButtonとかJLabelとか一定サイズを取るものを置いて無くて、ただ、paintComponentでグラフを描いているだけだと、初期のサイズが0,0のままとなるので、JScrollPane にいれると表示されてないように見えます。
対策は、JPanel のインスタンスを作成する時に
setPreferredSize(new Dimension(int width, int height) );
を実行してやるとよいです。
グラフを描くたびに全体サイズが変化するなら、その時に再度上記関数を実行し、
getParent().revalidate();
でいけるかとおもいますが、私は別関数で、Imageに描いてからrepaintして、paintComponentでは、drawImageだけにしているので、
paintComponent内から直接呼び出しでもいけるかどうかはやったことがありません。
// 参考ソース
// 以前作った画像表示用utilityクラス抜粋、JComponentでも、JPanelでも効果は同じ
public class SimpleCanvas extends JComponent {
protectedjava.awt.image.BufferedImage offset_img;
public SimpleCanvas(int width, int height){
setPreferredSize(new Dimension(width, height) );// これで、JScrollpaneに対し強制sizeになる
setImage( width, height );
}
/** 初期画像の作成 */
private void setImage(int width, int height ){
offset_img = new java.awt.image.BufferedImage( width, height,
java.awt.image.BufferedImage.TYPE_INT_RGB);
Graphics dt_g = offset_img.getGraphics();
dt_g.setColor(Color.white);// 背景色 白画面作成
dt_g.fillRect( 0,0, width, height); // 右上x0,y0, 左下x2,y2
dt_g.dispose();
}
public void paintComponent(Graphics g){
int mxw= this.getWidth(), myh= this.getHeight(); // this = Canvas、描画サイズ=左下座標=コンポーネント境界
g.setColor(Color.black);// 背景色
g.fillRect( 0,0, mxw, myh); //JScrollPane内の Canvasサイズよりimageが小さいとよけいなものが写り込むのを回避
int mwidth = offset_img.getWidth(this);
int mheight= offset_img.getHeight(this);
g.drawImage(offset_img, 0,0,mwidth,mheight, 0,0, mwidth,mheight, this);
super.paintComponent(g);// swingでは、必ずsuperを呼ぶこと
}
/** 画像データを貰ってrepaint
* @param img : 表示したい画像オブジェクト
*/
public void setImage_paint(BufferedImage img){
offset_img = img;
int mwidth = offset_img.getWidth(this);
int mheight= offset_img.getHeight(this);
setPreferredSize(new Dimension( mwidth,mheight ) );
repaint();// 外からの呼び出しではrepaintも呼び出す必要あり
getParent().revalidate();// 親をvalidateで再描画
}
}
初めての質問で、こんな文章で内容が理解してもらえるか不安でしたが、回答がきてありがたかったです。早速やってみます。ありがとうございました。
独学で入門書たよりに(しかも古本屋で購入)やっている為、本に載ってないことをしたいときにどのクラスやメソッド等使用すればいいのかわかりません。これが分かれば調べれるのですが。
これからもちょくちょく質問することになりそうですが、よろしくおねがいいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの大きなシートでグラフを見つける 4 2022/07/28 10:07
- WordPress(ワードプレス) WordpressでYouTubeの埋め込みができない。 1 2022/10/26 01:08
- その他(ソフトウェア) Figma 1 2023/06/23 14:22
- Excel(エクセル) <スプレッドシート>採用進捗 グラフ作成について 3 2022/10/23 15:52
- その他(生活家電) 太陽光パネル規格外品の個人宅への流用 3 2023/04/17 15:14
- その他(病気・怪我・症状) 新型コロナワクチンのオミクロン対応型がWHOのワクチン専門家パネルは追加接種を推奨する十分なデータが 2 2022/10/16 08:03
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- その他(法律) イラストの著作権についてです。 フラワースタンドのパネル用のイラストを私がとある絵師様に依頼しました 1 2023/05/28 00:26
- モニター・ディスプレイ 液晶モニター選択について 7 2022/08/15 12:56
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#】フォームをなめらかに移動
-
Javaで電卓を作りたい
-
JAVA EOFの検出 (条件文で「...
-
String変数から数字以外を排除する
-
先入れ先出し法のプログラミン...
-
アンマネージDLLで、ダイアログ...
-
javaでcsvファイル読込時の改行...
-
「配列定数は、イニシャライザ...
-
JUnit4のアノテーションについて
-
C#で「型または名前空間名 'int...
-
JAVA エラー 式の開始が不正で...
-
java spring でエラーが出て困...
-
Java 初心者 int型の取り扱い方
-
(Swing)JTextFieldを半角のみ入...
-
byte[]→int
-
Javaのファイル名チェックについて
-
C#でfirefoxのウインドウを移動...
-
パソコンキーボードで時分秒を...
-
VBAで配列の計算
-
Path型をString型へ変換する(Java)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
JAVAでCの関数ポインタのような...
-
java spring でエラーが出て困...
-
c# デリゲート関連の命名について
-
DataSet(DataTable)の使い方
-
sin曲線とcos曲線を描くプログ...
-
6桁の数字を重複なしでランダム...
-
C#で実行時にメソッドの返り値...
-
式の型は配列型で int に解決済...
-
javaでcsvファイル読込時の改行...
-
C++からC#のdllを参照する際、...
-
Stringの文字列をString[]配列...
-
Comparatorを使用したソートに...
-
JUnit4のアノテーションについて
-
SAStrutsでActionからJSPに値を...
-
前日日付の取得
-
JAVA エラー 式の開始が不正で...
-
初心者ですが、今javaで簡単な...
-
java 長さの異なる配列の代入
-
java初心者の質問(3つの整数の...
おすすめ情報