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);
}

如果要制作自己的颜色,可以使用 new 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) 方法,两者之间存在差异,我相信这是从 update 方法调用它们的顺序,但我可能错了,但这应该可以解决您的问题问题。

至于颜色,请查阅 API。您可以将 RGB 值传递给 Color 构造函数以创建各种颜色。颜色颜色 = 新颜色(int red,int green,int blue)。我认为这是创建自定义颜色的最简单方法,但就像我在 API 中所说的那样。希望这可以帮助。

于 2013-04-06T20:16:06.667 回答
-1

矩形只绘制一次,但每次调用 JFrames repaint() 方法时都会将其擦除并绘制基本组件。要在 JFrames 中添加自定义绘图,您必须重写 paint 方法。在这里,我稍微改进了你的代码,让你开始走这条路。如您所见,您想在 Paint 方法中绘制框。我制作了一个 Container 元素来完成您的绘图并删除了背景颜色,并将其添加到paint方法中。

尝试这个

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 回答