java添加更改图形颜色的按钮
这幅画基本上是一个有天空和太阳的双叶窗,就像你在看窗外一样。 我需要日夜添加按钮。通过单击每个按钮,天空的颜色将变为深蓝色和浅蓝色,太阳的颜色将相应地变为月亮的颜色。我已经添加了按钮,它们出现了,但我似乎无法思考如何放置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();
}
}
# 1 楼答案
我用你的GUI做了一个夜空
我不得不对你的代码做了很多修改才能让它正常工作
我必须使
JComponent
类成为一个内部类,这样它就可以引用DrawingOne
类变量我必须移动
DrawingOne
类中的main
方法,以便启动应用程序我通过调用}方法启动了Java应用程序。此方法确保在Event Dispatch Thread上创建和执行Swing组件
SwingUtilities
{我重新排列了
DrawingOne
构造函数中语句的顺序,因此它们更有意义。我将绘图面板设置为您喜欢的尺寸,而不是JFrame
。重要的是绘图面板的大小,而不是JFrame
大小我创建了天空和太阳颜色
DrawingOne
类变量,以便可以更改它们。我写了几个方法来改变颜色我编写了一个
ActionListener
类,它根据您左键单击的按钮更改颜色下面是完整的可运行代码