Tag: paintcomponent

在透明的JPanel上绘画时留下痕迹

我是Java中相对较新的图形程序员,这是一个我正在尝试的简单程序。 这是完整的代码:分为3个类。 第1类: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MyPanelB extends JPanel { int x=0; int y=0; public void paintComponent(Graphics g) { x=x+1; y=y+1; setOpaque(false); //setBackground(Color.cyan); g.setColor(Color.red); g.fillRect(x,y,x+1,y+1); } } 第2类: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MyFrameB implements ActionListener { MyPanelB p1; public void go() { JFrame f1= new JFrame(); […]

为什么.paintComponent()是在JComponent上定义的?

很抱歉,如果我的问题没有适应Stackoverflow的要求,因为它是理论上但我不知道还能在哪里问。 在过去的几周里,我一直在努力更好地了解Swing API的工作原理以及它的组件,以便创建我自己的自定义组件。 我已经阅读了很多教程,在这里搜索,我在Java的摇摆源代码中非常深入,坦率地说……我的思绪很混乱。 据我所知,摆动组件由3部分组成: 模型:存储组件状态和数据的位置 UI委托:绘制组件和 JComponent:它将所有内容联系在一起。 在本教程https://docs.oracle.com/javase/tutorial/uiswing/painting/step2.html中有一段说明: paintComponent方法是进行所有自定义绘制的地方。 >此方法由javax.swing.JComponent定义,然后由>子类重写以提供其自定义行为 为什么JComponent上有paintComponent方法? 它不应该是UI委托的独家方法吗?

如何绘制多个矩形

所以我试图制作一个简单的程序,你点击屏幕,它会创建一个块落下并与下方较大的块碰撞并坚持下去。 有点像一个简单的碰撞程序。 问题是当我创建一个块时,它先前删除了块。 我做了一个数组,但它仍然这样做。 你们有谁知道我做错了什么吗? 我确定它是一个简单的修复。 public class Screen extends JPanel implements Runnable { public static JLabel statusbar; //displays a status bar showing what mouse movements are taking place private Image cat; //image of the cat public int xCoord ; //get the coordinates of the mouse pressed public int yCoord ; public int xCreate; public […]

Java图形检验模拟;

我正在开展一个Checkout Simulation项目。 我有代码使它运行,但我很难理解并实现如何在某个条件为真时添加图形(在我的情况下为正方形)。 例如,我已经制作了我的代码,以便它通过随机数字,如果2,4,6或8是随机生成的,有人将被添加到队列中,如果它们是偶数1或3,那么同样如此从队列中删除。 我基本上只是想知道如果我满足了我的条件,如何在屏幕上添加一个方块(例如,生成一个4应该在屏幕上添加一个方块,但它没有)任何帮助真的很感激! 公共类MainPanel扩展JPanel { private Queue tillQueue; private int rndNumber; private int currentLength; private ArrayList lengthList; private double mean; private Random rand; private int MAXLENGTH; private static Random r = new Random(); private static Random r2 = new Random(); Color colour; private static final int IMAGE_SIZE = 600; private Timer timer; private […]

Java – 单击按钮后绘制圆圈

我试图用java中的按钮画一个圆圈。 我将System.out.println()放在action方法中以确保我的代码正常工作。 println显示但在任何地方都没有圆绘图。 有什么建议? 谢谢 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; public class CircleViewer { public static void main(String[] args) { CircleComponent circle = new CircleComponent(); JButton button = new JButton(“Draw”); final JPanel panel = new JPanel(); panel.add(button); JFrame frame = new JFrame(); class addActionListener implements ActionListener { public […]

Java Swing – Repaint()无法正常工作

我从这个主题中选择了程序。 我尝试在实时模式下编辑点。 我将MouseMotionListener添加到构造函数中并编写一些基本函数以接近鼠标点并编辑此点。 当我在构造函数中得到(x,y)点时, repaint()工作很奇怪。 当我在paintComponent得到(x,y)点时, repaint()根本不起作用。 因此,这是在构造函数和paintComponent获取(x,y)的图像。 我的错误在哪里? package simplegrapher2; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.Stroke; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.geom.Line2D; import java.awt.geom.Point2D; import static java.lang.Math.sqrt; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class SimpleGrapher2 extends JPanel […]

paintComponent没有绘制到JPanel上

我正在做一个家庭作业,我应该制作一个程序,允许你绘制自定义的形状和线条,并在屏幕上移动它们。 最初我使用公共无效paint(g)进行绘画,但是当我打电话给重画时,形状闪烁。 因此,我切换到paintComponent(g) 。 然而,当我尝试绘制一个没有任何形状出现的形状时。 我相信这是因为它不是在JPanel上面绘画。 框架在3行BorderLayout有3个面板。 [Button JPanel] [Draw Box JPanel] [Coordinate Jpanel] 我想要绘制的面板是Draw Box面板,当然。 这是我目前的代码: import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenuBar; import javax.swing.JPanel; public class Main extends […]

使用.setPaint(渐变)时resize时不重绘

一旦我在我的代码中使用渐变,重新调整就不会在resize时完成resize时resize(resize的黑色矩形,请参阅下面链接中的图像)。 当我停止resize时,一切都会被重新绘制,但只有这样。 如果我不使用g2d.setPaint(gradient); 我有一个快速重绘 http://gui-builder.com/C41142775162.rar public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D)g; //sample of the code GradientPaint gradient = new GradientPaint(startX, startY, greyColor1, endX, endY, new Color(120,120,120)); g2d.setPaint(gradient); g.drawLine(i, startY, i, endY); } 我尝试在resize上repaint() ,我试图repaint()鼠标被拖动但没有。 这里有一些SSCCE(对不起,我之前没有发布): BufferedImage aa; @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics gr = aa.getGraphics(); Graphics2D g2d = […]

Java中的paintComponent()没有被调用

我试图绘制一个简单的矩形,但我认为paintComponent方法没有被调用。 以下是使用main方法的类的代码: package painting; import java.awt.*; import javax.swing.*; public class Painting { public static void main(String[] args) { JFrame jf; jf = new JFrame(“JUST DRAW A RECTANGLE”); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setLayout(null); jf.setLocationRelativeTo(null); jf.setSize(600,600); jf.setVisible(true); Mainting maint = new Mainting(); jf.add(maint); } } 和paintComponent()的类 package painting; import java.awt.*; import javax.swing.*; public class Mainting extends JPanel { @Override public […]

Java Swing通过鼠标单击和拖动绘制线条

我想带回一个之前被问过的问题: 鼠标移动时的java绘制线 “我想在我的应用程序中添加一个function,允许用户通过在起始位置单击鼠标并在结束位置释放它来绘制直线。线条应在鼠标移动时移动,直到最终释放;类似于使用Microsoft Paint应用程序绘制线条的方式。 如何实现这一点,以便线条在移动时重新绘制,而不重新绘制可能已在该矩形区域中绘制的其他内容?“ 问题是:如何在旧线条的情况下绘制多条线? 这是适用于我的代码,但是一旦绘制一个新代码,前一行就会被删除: public static void main(String args[]) throws Exception { JFrame f = new JFrame(“Draw a Red Line”); f.setSize(300, 300); f.setLocation(300, 300); f.setResizable(false); JPanel p = new JPanel() { Point pointStart = null; Point pointEnd = null; { addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { pointStart = e.getPoint(); } […]