質問させて頂きます。
今、ファイルから西暦、月、日、時間、そのときの温度、湿度を読み込んでグラフ表示するプログラムを作っています。そこで、Swingを使ってPanelを三つ作成し、一番上のPanelにグラフ、二番目にデータの日付を指定するJComboBoxボタン(何年何月何日等)、三番目にグラフ描画時の現在時刻を表示するプログラムを作っています。
そこで質問なんですが、一番目のPanelにグラフを表示する方法がわからなくて困っています。
これのPanel1に簡単な図を描く方法を教えていただければ自分でも考えられると思いますので、よろしくお願いします
No.1ベストアンサー
- 回答日時:
JPanelを継承したClassを作る方法で、一例を紹介します。
1. JPanelを継承した class を1つ作ります。(hizukeの下に書けばok)
public class hizuke extends JApplet implements ActionListener {
……
}
class MyGraphPanel extends JPanel {
}
2. 今までの p1 を このclassに変えます。
public class hizuke ... {
private MyGraphPanel p1; // <-------ココのclass変更
public void init(){
//********** JPanel **********************************/
p1 = new MyGraphPanel(); // <-------ココのclass変更
3. MyGraphPanelクラスに、hizukeクラスからデータをもらうpropertyを作成します。
class MyGraphPanel extends JPanel {
private int[] graphData = null;
void setGraphData(int[] graphData) {
this.graphData = graphData;
}
}
4. 実行ボタンが押されたら、データを渡してグラフ描画を依頼する命令を出します。
public class hizuke ... {
……
public void actionPerformed(ActionEvent e){
……
else if(e.getSource()==bt1) {
int[] graphData = {20, 24, 25, 26, 28, 24, 22, 18, 20, 22, 20, 17};
p1.setGraphData(graphData);
p1.repaint();
}
5. グラフを描画する処理をMyGraphPanelに入れます。
class MyGraphPanel extends JPanel {
……
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (graphData == null) return;
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.blue);
//棒グラフ
for (int i = 0; i < graphData.length; i++) {
g2.draw3DRect(0, i * 16, graphData[i] * 10, 10, false);
}
}
}
※jdkの\demoの配下にsampleが沢山あるので、それらも参考にしましょう
この回答への補足
グラフが表示できました!!
ありがとうございます。
Jpanelを継承したクラスを別に作ればいいなんて、全く気が付きませんでした。
これを基にして必要なグラフが書けそうです。
厚かましくて申し訳ないんですがもう一つだけ助言をいただけないでしょうか。
貼り付けたソースプログラムで、Panel2のとこにいくつかボタンが配置してあります。これは年、月、日を選択できるように組んであるんですがバグがあるんです。左側の年から順に選んでいけば問題なくできるんですが、年と月を変えずに日を連続して変えたりすると、1~31とかがどんどん追加されていってしまうんです。removeAllItemsで一旦リストを消去して、直後にaddItemで書こうと思ったんですが、それだとselectItemが1で固定されて上手くいきませんでした。
色々調べてみたものの解決できなかったんですが、リストの中身を上書きしたりする方法はないんでしょうか。
No.2
- 回答日時:
> リストの中身を上書きしたりする方法はないんでしょうか。
は、removeAllItems()して、addItem()で問題ありません。問題はイベントが来たときの処理内容でしょう。
まず、月はinit()で1~12を一度入れたら、もう二度と入れ替える必要はないはずです。
それと、日が変えられたからといって、何かしないといけないようなことも無いはずです。
この2点をしっかり踏まえて、アクション時の処理(actionPerformed)を見直されると、解決するでしょう。
返答ありがとうございます。
ちょっと仕様上の問題がありまして、入れ替える方法を考えていたんですが、効果的な方法はなさそうですね。
後はなんとか自分で考えてみようと思います。
システムの方も教えていただいたおかげでめどが付きそうです。
pchelp-sandboxさん、本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) <スプレッドシート>採用進捗 グラフ作成について 3 2022/10/23 15:52
- Excel(エクセル) Excelグラフについて 1 2022/06/16 16:06
- Excel(エクセル) エクセルの折れ線グラフで教えて下さい 1 2023/03/05 22:48
- Excel(エクセル) エクセルの大きなシートでグラフを見つける 4 2022/07/28 10:07
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- Excel(エクセル) エクセルのグラフに上下限値の横棒を表示させたい 5 2022/12/12 11:09
- 数学 写真の(1)の問題についてですが、解説を見るとグラフを使って示しているのですが、解説の文章はグラフを 1 2023/02/09 17:48
- Excel(エクセル) Excelグラフについて 1 2023/05/12 16:26
- Excel(エクセル) 折れ線グラフの描き方 2 2022/07/11 10:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エンターキーを押すとOKボタン...
-
ペイントソフトを作っているの...
-
GetDIBits関数の使い方について
-
C#で、あるクラスのメンバーす...
-
C#から、C++で作成したdll内の...
-
マルチスレッドプログラムから...
-
大量のデータを読み込んで表示...
-
JButtonの画像をactionPerforme...
-
C#で別のFormへ複数の値を返そ...
-
Junitテストでvoid戻り値メッソ...
-
C# LISTBOXの複数項目取得
-
C# visibleプロパティをfalseに...
-
struts2のchainで値の受け渡し...
-
Javaの課題について質問です。...
-
パスがとおらない・・・
-
unityでのC++エラーの原因がわ...
-
Log4jで機能毎に別ファイルへ出...
-
flush()とclose()について
-
C言語のポインターに関する警告
-
IF関数でEmpty値を設定する方法。
マンスリーランキングこのカテゴリの人気マンスリー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を何度も呼ぶには
おすすめ情報