【发布时间】:2021-10-28 15:50:14
【问题描述】:
我只是在学习 GUI 的工作原理,我想编写一个代码,其中会发生以下情况:
- 首先我们看到红色矩形
- 点击后会变成一个渐变的圆圈(我选择了橙色和粉色)+ 背景为黑色。
问题是,我使用repaint()时不知道如何通知更改,我尝试用另一种方法创建第一张图片 - 失败,也许我缺乏一些知识。目前我们只得到第二个在点击后不会改变的输出。
这是我卡住的那一刻的代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleGUI implements ActionListener {
JButton button;
JFrame frame;
public void work() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button = new JButton("Color change");
button.addActionListener(this);
mojpanel panel = new mojpanel();
frame.getContentPane().add(BorderLayout.SOUTH, button);
frame.getContentPane().add(BorderLayout.CENTER, panel);
frame.setSize(300,300);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent event) {
frame.repaint();
}
}
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import javax.swing.*;
import java.awt.Graphics2D;
public class mojpanel extends JPanel {
public void paintComponent(Graphics g) {
g.setColor(Color.black);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
GradientPaint gradient = new GradientPaint(70,70, Color.orange, 150,150, Color.pink);
((Graphics2D) g).setPaint(gradient);
g.fillOval(100, 100, 100, 100);
}
}
import javax.swing.JFrame;
public class Test {
public static void main(String[] args) {
SimpleGUI aplGUI = new SimpleGUI();
JFrame frame = new JFrame();
mojpanel panel = new mojpanel();
frame.add(panel);
aplGUI.work();
}
}
import java.awt.*;
public class Painting extends SimpleGUI {
public void paint(Graphics g) {
g.setColor(Color.red);
g.drawRect(100, 100, 100, 100);
g.fillRect(100, 100, 100, 100);
}
}
【问题讨论】:
-
GUI 不是“初学者主题”,自定义绘画也不是。通过更改相关(颜色)属性的范围并定义设置这些属性的方法,对于任何持有对类实例的引用的类,这个问题可能会得到解决。对于准备制作 GUI 的人来说,这应该是有意义的。如果没有,请返回并学习基础知识。 编辑:顺便说一句,
Painting类似乎从未被使用过。 -
不需要两个
JFrame实例(一个在Test中,一个在SimpleGUI中)。一步一步来:学习如何使用JButton和JPanel制作JFrame。稍后学习如何在这个JPanel上进行自定义绘画。 -
请修剪您的代码,以便更容易找到您的问题。请按照以下指南创建minimal reproducible example。
标签: java swing graphics awt java-2d