2

私は最初のJavaプロジェクトに取り組んでいますが、混乱しています。これにより、ダイアログボックスが開き、0〜255の数値が取得され、整数であり、範囲内にあることが確認されます。次に、intを使用して、グラフィックアプレットの背景に灰色の陰影が付けられます。私はそれがすることになっているすべてをやっています!しかし、それはアプレットを描画しません。プログラムは、最後にJOptionPaneが呼び出された後に終了します。

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

@SuppressWarnings("serial")
public class DrawingShapes extends JApplet
{
  private Shade shade = new Shade();
  private void getColor()
  {
    int rgb = 0;
    boolean useful = false;
    String number = JOptionPane.showInputDialog("Make this easy for me.\n"
    + "Type an integer between 0 and 255");
    {
      try
      {
        rgb = Integer.parseInt(number);
        if (rgb > 0 && rgb < 255)
        {
          useful = true;
          shade.setColor(rgb);
        }
        else
        {
          useful = false;
          number = JOptionPane.showInputDialog( null, "\"" + number + "\""
          + " is not between 0 and 255!\n"
          + "Lrn2 be doin' it right!" );
        }
      }
      catch (NumberFormatException nfe)
      {
      number = JOptionPane.showInputDialog(null, "\"" + number + "\""
      + " is not an integer!\n"
      + "Lrn2 be doin' it right!");
      }
    }
    if (useful)
    {
      JOptionPane.showMessageDialog(null, rgb + " will be the shade of gray.");
      //WHEN this message is closed, the program seems to quit.
      //System.exit(0);
    }
  }
  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: " + color);
      System.out.println("col: " + col); //IT prints these lines....
    }
    public void paint (Graphics g) //Everything after this is sadly ignored.
    {
      int size = 500;
      setSize(size, size);
      int rgb = color;
      Color gray = new Color(rgb,rgb,rgb);
      setBackground(gray);
      System.out.println(rgb + " This should be the third time");
      g.drawOval(0, 0, size, size);
    }
  }
}

'public void paint(Graphics g)'の何が問題なのか理解できませんが、何も起こりません。誰からの訂正も歓迎します。私は言語にあまり慣れていないので、笑える間違いを犯したと確信しています...

4

1 に答える 1

4

これはアプレットプログラムではありません-はい、それはJAppletを拡張しinitますが、メソッドはなく、代わりにメソッドがありますmain-アプレットプログラムで呼び出されないメソッドです。他の作業を行う前に、まずJAppletチュートリアルを実行してください。

その他の提案:

  • ここでも、適切なinit()オーバーライドが必要です。
  • JAppletまたは最上位のWindowコンポーネントに直接描画しないでください。
  • 代わりpaintComponent(...)に、JAppletに表示されているJPanelのメソッドを描画します。
  • paint(...)orメソッドで背景色を設定したりGUIの状態を変更したりしないでくださいpaintComponent(...)
  • super.paintComponent(...)メソッドオーバーライド内でメソッドを呼び出す必要がpaintComponent(...)あります。多くの場合、これはメソッドの最初のメソッド呼び出しです。
  • また、同じサイトでSwing Graphicsチュートリアルを読むと、非常に役立ちます。
  • アプレットの代わりにデスクトップアプリケーションを作成したい場合は、メソッドのオーバーライドがなく、メインメソッドが必要であるという点で、攻撃の配置が少し異なりinit()ます。コンポーネントをトップレベルウィンドウとしてJFrameに追加します。
  • より良い助けを得るために、あなたの質問に言い訳や謝罪を少なく投稿し(私はほとんど削除しました)、代わりにできるだけ明確な方法で役立つ情報を提供することに焦点を当てます。私たちはあなたの問題を解決するのを助けることに興味があるので、あなたの状況にはあまり興味がありませんので、私たちがあなたを助けるのを手伝ってください。

ラック!

于 2012-09-03T03:07:27.340 に答える