我正在尝试在指定位置显示一个矩形,但它没有显示出来。背景是品红色但矩形不存在。
另外:除了“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);
}
}
答案 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);
}
}
}