Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

javaで背景色を変更したいのですが

java初心者中の初心者です。背景色の変更方法をお尋ねします。

具体的質問内容:
BMI値(肥満度)に応じて背景の色が変化するようにしたい。
BMI値が20未満の場合は黄色、20〜24未満の場合は緑、24以上は赤、エラーの場合は青になるように。
actionPerformedで、結果に応じてbgcolorを変更するのだと思いますがよくわかっておりません。

大変あつかましいお願いですが、記述そのものを御教示いただけると助かります。
ソースコードをここに載せたらいいのか迷ったのですが、必要であればお知らせください。
どうぞよろしくお願いいたします。

 
 

10

回答

83141

閲覧

10件の回答

評価

0

1. 「何の」背景色ですか。
2. コードで書けなくても、なんとなく「こんな順序で処理」という流れはできますか?

>初心者中の初心者
こういうのは書かないほうがいいですよ。あんまりいい印象にはなりません。

エラーの場合は背景そのままで赤い文字が出るくらいがいい気が…ってこれは本題と関係ないですが。

評価

0

レスありがとうございます。

>1. 「何の」背景色ですか。
予めサンプルコードのありそれを修正するのですが、textAreaの周りの背景(表示領域全体)ということです。

>2. コードで書けなくても、なんとなく「こんな順序で処理」という流れはできますか?

public void init() {
    setBackground(Color.lightGray) ;

となっているのですが、共通変数bgColor = Color.lightGray を初期化して、その後repaintを実行するように考えています。

>>初心者中の初心者
>こういうのは書かないほうがいいですよ。あんまりいい印象にはなりません。

これから注意します。

>エラーの場合は背景そのままで赤い文字が出るくらいがいい気が…ってこれは本題と関係ないですが。

それもいい提案ですね。でも今回は取り合えず背景色を変えることにトライしてみます。

評価

0

>予めサンプルコードのありそれを修正するのですが、textAreaの周りの背景(表示領域全体)ということです。
続くコードを見ると、それ自体はできているようですね。

>共通変数bgColor = Color.lightGray を初期化して、その後repaintを実行するように考えています。
という代入もできていますから、あとは

>BMI値が20未満の場合は黄色、20〜24未満の場合は緑、24以上は赤、エラーの場合は青になるように。

これをコードに直すだけでしょう。

評価

0

質問者のJINKOです。
修正しようとしているコードを示します。
今までに講義で演習したことを参考に追記していますが、とってつけただけで目的の色を変更するまでには至りません。
BMI値(肥満度)の値により色が異なるようにしたいので、if構文を追加するはずですが、どこにそれを入れたらいいのか、またifの書き方さえわかっていません。

// jprog05.java

import java.awt.* ;
import java.awt.event.* ; // イベント処理
import java.applet.* ;

// クラス名 jprog05 はファイル名と一致させる
public class jprog05 extends Applet implements ActionListener {
  
  // GUI部品
  TextField tf1, tf2 ;
  Button btn ;
  TextArea  ta ;
  // 背景色変更のための情報
  Color[] bgCol = { Color.yellow, Color.green, Color.red, Color.cyan } ;
  int     idxBG = -1 ;
  
  // 初期設定メソッド -- アプレットが動作を始める時に一度だけ実行される
  public void init() {
    setBackground(Color.lightGray) ;
    // 部品を初期化
    tf1 = new TextField(10) ;
    tf2 = new TextField(10) ;
    btn = new Button("計算") ;
    ta  = new TextArea(3,40) ;
    ta.setEditable(false) ; // 出力専用に設定
    // 画面上に配置 -- 順序にも注意
    add( new Label("身長(cm)",Label.RIGHT) ) ; add( tf1 ) ;
    add( new Label("体重(kg)",Label.RIGHT) ) ; add( tf2 ) ;
    add(btn) ;
    add(ta) ;
    // イベントを受信するリスナーを登録
    btn.addActionListener(this) ;
  }
    
  // リスナー: Button, TextField, TextArea に対応
  public void actionPerformed( ActionEvent e ) {
    if( e.getSource() == btn ) { // 発生元を確認
      float sincho, taiju, himando ;
      // TextFieldからデータを取得
      try {
        sincho = Float.valueOf(tf1.getText()).floatValue() ;
        taiju  = Float.valueOf(tf2.getText()).floatValue() ;
      }
      catch(Exception err) { // 変換エラーへの対応
        sincho = 0 ;
        taiju  = 0 ;
      }
      if( sincho>0 && taiju>0 ) {
        himando = taiju*10000/(sincho*sincho) ;
        ta.setText( "あなたのBMIは"+himando+"です") ;
      }
      else {
        ta.setText( "データに不正な値があるか,入力されていません") ;
      }
      ta.repaint() ; // TextAreaのみを再描画
    }
  }

  // 描画メソッド -- 画面が再描画されるたびに実行される
  // repaint() をプログラム側から呼ぶことでも実行される
  public void paint(Graphics g) {
    if( idxBG >= 0   ) {  // 初期化されていない段階では何もしない
      g.setColor( bgCol[idxBG] ) ;
      // 表示領域の大きさ全体を塗る
      g.fillRect( 0, 0, getSize().width, getSize().height ) ;
    }
  }
    
}

評価

0

mioさんへ

2回目の回答ありがとうございます。
ちょうど返信いただくのが行き違いになってしまったようです。

>>BMI値が20未満の場合は黄色、20〜24未満の場合は緑、24以上は赤、エラーの場合は青になるように。

>これをコードに直すだけでしょう。

はい、確かにそうなのですが。。
BMI値=himondoとことなので、himando = >20 などとなるのでしょうか?


評価

0

>BMI値=himondoとことなので、himando = >20 などとなるのでしょうか?
と、なにか考えたら、試してみるのが吉です。

評価

0

mioさん

ご指導ありがとうございます。

確かに何度も記述を書き換えてやってみてます。

型の開始が不正です。
シンボルが見つかりません。

など、その都度コンパイルエラーが起きます。

できるまで自力でやってみますが、また質問させていただきますので、その際はアドバイスをお願いします。

評価

0

コンパイルエラーは、そのメッセージを検索なりしてみれば、なにが悪いのかが見つかるはずです。
エラーが出るたびにまるきり書き換えているのでは、いつまで経っても完成しません。
まずはある記述で、エラーがなくなるようにしてみてください。

評価

0

ご指導ありがとうございます。

>エラーが出るたびにまるきり書き換えているのでは、いつまで経っても完成しません。

なるほど、そうですね。
追記自体が的外れなのかと思って、元に戻してまた別にところを書き換えたりと、ほんとうに試行錯誤で、前に進まない状態です。

でも、まずはエラーは1つづつつぶして解決するようにしてみます。


評価

0

たしかに、そうやってエラーをなくしても、そもそも最初のアプローチから違っているかも知れません。
でも、コンパイルエラーというのは、基本的なことを間違えているということです。
それに対する修正を積み重ねていけば、次回同じエラーになったときに「あ、こないだこういうことだったから、今回も同じ間違いをしてるな」なんて思いつけるようになります。
そういうところはさっさと直せるようにして、実際に動くものを、はやく作れるようになりましょう。
そして、本来悩むべきところであるロジックに時間をかけられるようになりましょう。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。