0

指定した場所に四角形を表示しようとしていますが、表示されません。背景はマゼンタですが、長方形はありません。

また、「色(ここにいくつかのオプションを挿入してください)」以外の色にアクセスするにはどうすればよいですか

import javax.swing.*;
import java.awt.*;


class Screensaver {
    private final static int FRAME_HEIGHT = 600;
    private final static int FRAME_WIDTH = 600;
    public static void main(String[] args){
        JFrame win;
        Container contentPane;
        Graphics g;


        win = new JFrame();
        win.setSize(FRAME_WIDTH, FRAME_HEIGHT);
        win.setVisible(true);
        contentPane = win.getContentPane();
        contentPane.setBackground(Color.MAGENTA);
        g = contentPane.getGraphics();
        g.setColor(Color.BLACK);
        g.fillRect(80, 350, 400, 250);

    }
}
4

4 に答える 4

3

main(); でペイントするべきではありません。JPanel を拡張し、paintComponent() を変更して、パネルを JFrame に追加する方がよいでしょう。

public class PaintPanel extends JPanel {

    public PaintPanel() {
        setBackground(Color.MAGENTA);
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g); // This paints the background

        g.setColor(Color.BLACK);
        g.fillRect(80, 350, 400, 250);
    }
}

そして main() で:

public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.add(new PaintPanel());
    frame.setVisible(true);
}

独自の色を作成する場合は、新しい Color(int red, int green, int blue) コンストラクターを使用できます。

于 2013-04-06T20:03:04.750 に答える
0

これを試して :

import javax.swing.*;
import java.awt.*;

class Screensaver {

    private final static int FRAME_HEIGHT = 600;
    private final static int FRAME_WIDTH = 600;

    public static void main(String[] args) {
        JFrame win;
        Container contentPane;
        win = new JFrame();
        win.setSize(FRAME_WIDTH, FRAME_HEIGHT);
        win.setVisible(true);
        Component comp = new Component();
        contentPane = (Container) win.getContentPane().add(comp);


    }
    }

    class Component extends JComponent {

    @Override
   public void paintComponent(Graphics g) {
    super.paintComponent(g);
        g.setColor(Color.magenta);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(Color.BLACK);
        g.fillRect(80, 350, 400, 250);
    }
}

色については、新しい色を作成し、必要に応じて赤、緑、青を設定します。これを試してください:

g.setColor(new Color(red, green, blue));
于 2013-04-06T20:11:21.867 に答える
0

何かを描画する場合は、Swing コンテナー、JComponent、JPanel などから継承するクラスを作成し、paint(Graphics g) メソッドをオーバーライドします。マゼンタの背景が表示される場合は、contentPane が追加されている必要があります。おそらく起こっているのは、長方形の上にマゼンタの背景をペイントすることですが、それは単なる推測です. これを試して...

public class ContentPane extends JComponent {
     public ContentPane() {

     }

     @Override
     public void paint(Graphics g) {
          g.setColor(Color.MAGENTA);
          g.fillRect(0, 0, getWidth(), getHeight());

          g.setColor(Color.BLACK);
          g.fillRect(80, 350, 400, 250);

     }
}

次に、メイン クラスで ContentPane クラスのオブジェクトをインスタンス化し、それを JFrame に追加します。repaint() への呼び出しはおそらく不要ですが、それにより確実にペイントされます。paintComponent(Graphics g) メソッドをいじることもできます。2 つには違いがあります。update メソッドから呼び出された順序だと思いますが、おそらく間違っていると思いますが、それで解決するはずです問題。

色については、API を参照してください。RGB 値を Color コンストラクターに渡して、あらゆる種類の色を作成できます。色 color = 新しい色 (int 赤、int 緑、int 青)。これがカスタム カラーを作成する最も簡単な方法だと思いますが、API ですべてを説明したように。お役に立てれば。

于 2013-04-06T20:16:06.667 に答える
-1

長方形は 1 回描画されますが、JFrames の repaint() メソッドが呼び出されるたびに長方形が消去され、基本的なコンポーネントが描画されます。JFrames にカスタム描画を追加するには、ペイント メソッドをオーバーライドする必要があります。ここでは、コードを少し改善して、その道を歩み始められるようにしました。ご覧のとおり、Paint メソッドでボックスを描画します。描画を行う Container 要素を作成し、背景色を削除して、ペイント メソッドにも追加しました。

これを試して

import javax.swing.*;
import java.awt.*;

public class JavaApplication10 {
    private final static int FRAME_HEIGHT = 600;
    private final static int FRAME_WIDTH = 600;
    public static void main(String[] args){
        JFrame win = new JFrame();
        win.setContentPane(new MyBoxContainer());
        win.setSize(FRAME_WIDTH, FRAME_HEIGHT);
        win.setVisible(true);
    }

    private static class MyBoxContainer extends Container {
        @Override
        public void paint(Graphics g) {
            super.paint(g);
            g.setColor(Color.MAGENTA);
            g.fillRect(0, 0, getWidth(), getHeight());
            g.setColor(Color.BLACK);
            g.fillRect(80, 350, 400, 250);
        }
    }
}
于 2013-04-06T20:13:10.343 に答える