Java没有显示矩形?

时间:2013-04-06 19:55:39

标签: java swing graphics awt paint

我正在尝试在指定位置显示一个矩形,但它没有显示出来。背景是品红色但矩形不存在。

另外:除了“Color。(此处插入极少数选项)”

之外,我如何访问更多颜色
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 个答案:

答案 0 :(得分: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)构造函数。

答案 1 :(得分: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);
    }
}

关于颜色,您可以创建新颜色并根据需要设置RED,GREEN,BLUE,试试这个:

g.setColor(new Color(red, green, blue));

答案 2 :(得分: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)方法,两者之间有区别,我相信它是从更新方法中调用的顺序,但我可能错了,但是这应该解决你的问题问题

关于颜色,请参考API。您可以将RGB值传递到Color构造函数中以创建各种颜色。 Color color = new Color(int red,int green,int blue)。我认为这是创建自定义颜色的最简单方法,但就像我在API中所说的一样。希望这会有所帮助。

答案 3 :(得分:-1)

矩形被绘制一次,但每次调用JFrames repaint()方法时,它都会擦除它并绘制基本组件。要在JFrame中添加自定义绘图,您必须覆盖绘制方法。在这里,我稍微改进了你的代码,让你开始沿着这条路走下去。如您所见,您想在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);
        }
    }
}