【发布时间】:2020-10-30 12:24:40
【问题描述】:
这幅画基本上是一个带有天空和太阳的两叶窗,就好像你在看窗外一样。 我需要添加按钮日夜。通过单击每个按钮,天空的颜色变为深蓝色和浅蓝色,太阳的颜色相应地变为月亮的颜色。我已经添加了按钮并且它们出现了,但我似乎无法理解应该放置 actionListener 的方式以及如何访问我的 g2 变量以更改这些颜色。
public class DrawingOne extends JFrame{
public DrawingOne() {
Container container = getContentPane();
container.setBackground(new Color(224, 196, 214));
container.setLayout(new BorderLayout(20, 20));
JButton j1 = new JButton("Day");
JButton j2 = new JButton("Night");
container.add(j1, BorderLayout.SOUTH);
container.add(j2, BorderLayout.NORTH);
setSize(DEFAULT_WITDH, DEFAULT_HEIGHT);
DrawComponent c = new DrawComponent();
add(c);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
}
public static final int DEFAULT_WITDH = 700;
public static final int DEFAULT_HEIGHT = 500;
}
class DrawComponent extends JComponent {
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
//the base for window
Rectangle2D.Double rectangle2Drect2 = new Rectangle2D.Double(37, 26, 458, 280);
g2.setStroke(new BasicStroke(3));
g2.setColor(Color.black);
g2.draw(rectangle2Drect2);
g2.setColor(Color.white);
g2.fill(rectangle2Drect2);
//left half-window
rectangle2Drect2 = new Rectangle2D.Double(51, 40, 160, 250);
g2.setStroke(new BasicStroke(3));
g2.setColor(Color.black);
g2.draw(rectangle2Drect2);
g2.setColor(new Color(135, 206, 235));
g2.fill(rectangle2Drect2);
//right half-window
rectangle2Drect2 = new Rectangle2D.Double(230, 40, 250, 250);
g2.setStroke(new BasicStroke(3));
g2.setColor(Color.black);
g2.draw(rectangle2Drect2);
g2.setColor(new Color(135, 206, 235));
g2.fill(rectangle2Drect2);
//основа ручки
rectangle2Drect2 = new Rectangle2D.Double(215, 140, 10, 10);
g2.setStroke(new BasicStroke(2));
g2.setColor(Color.black);
g2.draw(rectangle2Drect2);
g2.setColor(Color.white);
g2.fill(rectangle2Drect2);
//ручка
rectangle2Drect2 = new Rectangle2D.Double(217, 142, 4, 30);
g2.setStroke(new BasicStroke(2));
g2.setColor(Color.black);
g2.draw(rectangle2Drect2);
g2.setColor(Color.white);
g2.fill(rectangle2Drect2);
//the sun
g2.setColor(Color.getHSBColor(197.4F, 42.6F, 92.2F));
g2.fillOval(100, 60, 80, 80);
//горшок
int[] xpoints = {230 + 60, 300 + 60, 285 + 61, 244 + 60};
int[] ypoints = {240, 240, 290, 290};
int npoints = 4;
g2.setColor(new Color(172, 86, 30));
g2.fillPolygon(xpoints, ypoints, npoints);
//ствол цветка
g2.setStroke(new BasicStroke(5));
g2.setColor(new Color(0, 128, 0));
g2.drawLine(325, 200, 325, 238);
//лепестки
g2.setColor(new Color(255, 192, 203));
g2.fillOval(317, 200, 22, 22);
g2.fillOval(317, 175, 22, 22);
g2.fillOval(317 - 15, 190, 22, 22);
g2.fillOval(317 + 13, 190, 22, 22);
// g2.fillOval(317,190,22,22);
//центр цветка
g2.setColor(new Color(255, 165, 0));
g2.fillOval(317, 190, 15, 15);
}
public static void main(String[] args) {
DrawingOne frame = new DrawingOne();
}
}
【问题讨论】:
-
在
DrawComponen中添加一个方法changeColor()并通过c.changeColor()在动作监听器中调用它
标签: java swing graphics jframe jcomponent