0

私はJavaを学び始めたばかりです。少しすっきりしていますが、痛々しいほどシンプルだと思っているもので壁にぶつかっています。これが私が取り組んでいることの一部です:

import javax.swing.JApplet;
import javax.swing.JOptionPane;
import java.awt.Graphics;
import java.awt.Color;

@SuppressWarnings("serial")
public class DrawingShapes extends JApplet
{
  public static void main( String [] args )
  {
    int rgb = 0;
    boolean useful = false;
    String number = JOptionPane.showInputDialog("Make this easy for me.\n"
    +"Type an integer between 0 and 255");
    do
    {
      try
      {
        rgb = Integer.parseInt( number );
        if (rgb > 0 && rgb < 255)
        {
          useful = true;
        }
        else
        {
          useful = false;
        }
      }
      catch ( NumberFormatException nfe )
      {
        number = JOptionPane.showInputDialog( null, "\"" + number + "\""
        + " is not an integer between 0 and 255!\n"
        + "Lrn2 be doin' it right!" );
      }
    }
    while ( !useful );
    JOptionPane.showMessageDialog( null, "The integer is " + rgb);
  }
}

アイデアは、ダイアログが番号を要求し、それが番号でない場合はエラーを表示して再度要求するというものです。実際、これは今ではうまく機能しています。ただし、私が欲しいのは、その数値(rgb)を使用して、このクラス外のアプレットで使用される灰色の陰を作成することです。

Color shade = new Color(rgb,rgb,rgb);

別のクラス内から変数を読み取ることができないため、これは機能しません。または、それはおそらく可能ですが、私はその方法を理解するのに助けが必要だと思います。

つまり、入力を読み取って検証し、後で他の目的に使用できるようにする必要があります。私はこの目標を少し下回っているので、ガイダンスを求めてスタックオーバーフローになります。

編集:Dansの提案は変数を本当に助けてくれましたが、今はグラフィックを描画できないという問題があります。ダイアログが終了した直後にアプレットが閉じます。だから私はまだ少し困惑しています。背景の入力ダイアログの色を使用して、いくつかの単純な図形を描画する必要があります。コードの後半は次のようになります。

public static void main(String[] args)
  {
    new DrawingShapes().getColor();
  }
  public class Shade
  {
    private int color;
    public void setColor(int col)
    {
      color = col;
      System.out.println(color);
    }
    public void paint (Graphics canvas)
    {
      int col = color;
      Color gray = new Color(col,col,col);
      setBackground(gray)
      setSize(500, 500);  
      canvas.drawOval(0, 0, 500, 500);
      canvas.draw....[blablabla other shapes]
    }
  }

それに至るまでのすべてをコメントアウトしない限り、ペイントオプションを完全にスキップします...

4

1 に答える 1

0

潜在的な解決策については、以下のコードを参照してください。パブリック セッター メソッドを使用して、別のクラス (自分のクラスまたはその他のクラス) から設定できるプライベート フィールドを持つ Shade という新しいクラスを作成しました。

静的なメイン メソッドにすべてを含めるのは良くないため、クラスを少し変更したことに注意してください。

import javax.swing.JApplet;
import javax.swing.JOptionPane;

public class DrawingShapes extends JApplet {
  private Shade shade = new Shade();

  private void readColor() {
    int rgb = 0;
    boolean useful = false;
    String number = JOptionPane.showInputDialog("Make this easy for me.\n" + "Type an integer between 0 and 255");
    do {
      try {
        rgb = Integer.parseInt(number);
        if (rgb > 0 && rgb < 255) {
          useful = true;
          shade.setColor(rgb);
        } else {
          useful = false;
        }
      } catch (NumberFormatException nfe) {
        number = JOptionPane.showInputDialog(null, "\"" + number + "\"" + " is not an integer between 0 and 255!\n"
            + "Lrn2 be doin' it right!");
      }
    } while (!useful);
    JOptionPane.showMessageDialog(null, "The integer is " + rgb);
  }

  public static void main(String[] args) {
    new DrawingShapes().readColor();
  }

  public class Shade {
    private int color;

    public void setColor(int col) {
      color = col;
      System.out.println("The chosen color shade is " + color);
    }

  }
}
于 2012-09-02T20:12:08.050 に答える