Tag: paintcomponent

Java透明度渲染错误

我目前正在开发一个自助服务终端风格的Java程序来显示天气,时间,预测等。这是一个程序应该是什么样子的镜头(在更新时间之前拍摄的截图) 各个部分创建为JPanels,并重写了paintComponent()方法。 它们绘制渐变标题和半透明背景。 但是,当我更改其中一个面板的内容时,之前的内容会被遗忘,而不是被删除。 一个例子如下所示: 正如你所看到的,当时间从11:51变为11:52时,数字重叠,背景变得更亮(因为半透明背景被重新绘制) 图形错误 我该怎么做才能防止这种重叠? 最终,当单个面板更新其内容时,我宁愿不必重绘整个屏幕。 我宁愿只重绘那个特定的部分。 重新绘制背景,然后是其中的所有组件将很容易。 更新 几个答案涉及清除要绘制的区域。 无论我使用g.clear()还是AlphaComposite.CLEAR它都会删除背景图片。 这可以在下图中看到。 也许如果我可以在清除区域之前复制背景,我可以重新绘制背景的那一部分,然后适当地对其他图像进行分层。 思考? 更新2 提交了一个答案,其中显示了在透明面板和背景上放置的计时器的完整工作示例。 这非常有用,但是,我不是手动绘制我的子组件。 时间,天气图标和温度都是JLabel布局在半透明面板上。 我宁愿不必手动绘制单个组件。

为什么swing会简单地绘制两次?

这是绘制椭圆形的简单示例。 public class SwingPainter extends JFrame{ public SwingPainter() { super(“Swing Painter”); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); getContentPane().add(new MySwingComponent()); setSize(200, 200); setVisible(true); } public static void main(String[] args) { new SwingPainter(); } class MySwingComponent extends JComponent { public void paintComponent(Graphics g) { System.out.println(“paintComponent”); super.paintComponent(g); g.setColor(Color.red); g.fillOval(10, 10, 50, 50); } @Override protected void paintBorder(Graphics g) { System.out.println(“Paint border”); super.paintBorder(g); } […]

尝试使用JPanel绘制线条

我正在尝试使用JPanel绘制线条,而且我已经打了一些墙。 我可以将两面朝下,但一旦从x线中减去它就会出错。 package GUIstuff; import java.awt.Graphics; import javax.swing.JPanel; public class DrawPanel extends JPanel{ public void paintComponent (Graphics g){ super.paintComponent(g); int width = getWidth(); int height = getHeight(); int drawCounter = 0; // counters for all the while statements int drawCounter2 = 0; int drawCounter3 = 0; int drawCounter4 = 0; int x1 = 0; // […]

Java – 在paintComponent中使用合成的圆角面板

从最初的问题(下面),我现在提供以下奖励: 基于AlphaComposite的圆角解决方案。 请用JPanel演示。 角落必须完全透明。 必须能够支持JPG绘画,但仍然有圆角 不得使用setClip(或任何剪辑) 必须有不错的表现 希望有人快速选择这个,这似乎很容易。 如果有一个充分解释的原因,为什么永远不会这样做,其他人同意,我也会奖励赏金。 这是我想到的一个示例图像(但使用AlphaComposite ) 原始问题 我一直试图找到一种使用合成来做圆角的方法,非常类似于如何在Java中制作圆角图像或http://weblogs.java.net/blog/campbell/archive/2006/07/ java_2d_tricker.html 。 但是,我没有中间BufferedImage的尝试不起作用 – 圆形目标合成显然不会影响源。 我尝试了不同的东西,但没有任何作用。 应该得到一个圆形的红色矩形,而不是我得到一个正方形。 所以,我有两个问题,真的: 1)有没有办法使这项工作? 2)中间图像是否会实际产生更好的性能? SSCCE: 测试面板TPanel import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JLabel; public class TPanel extends JLabel { int w = 300; int h = 200; public TPanel() { setOpaque(false); […]

如何逐个绘制图像?

class DrawIma extends JPanel{ protected void paintComponent(Graphics g) { super.paintComponent(g); for (int i=0;i<20;i++){ for (int j=0;j<20;j++) { g.drawImage(BuArr[i*20+j], 20*i, 20*j, 20, 20, null); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } } } 在这部分中, BuArr是从BufferedImage划分的400个块 ,现在我希望它们逐个绘制,但是方法不能单独绘制块,我该怎么做?

Java paintComponent告诉是否再次调用

谷歌搜索了几天,我无法弄清楚如何在我处理paintComponent时调用paintComponent。 这个过程漫长而复杂。 如果我有第二个(或第三个)绘画请求,我想中止当前的绘制过程并重新开始最近的请求。

在Java中通过KeyTyped事件绘制两行

嗨我想在键盘上按h和v在面板中绘制水平和垂直轴。 我不知道……这是我的代码。 如何控制Keytyped事件 import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.KeyListener; import java.awt.event.KeyEvent; import javax.swing.JPanel; import java.awt.geom.Line2D; @SuppressWarnings(“serial”) public class DrawAxis extends JPanel implements KeyListener { private Graphics2D g2; private float x1; private float y1; private float x2; private float y2; public void DrawingAxis(float X1,float Y1,float X2,float Y2) { x1=X1; y1=Y1; x2=X2; y2=Y2; […]

Panel.repaint(); 弄乱了布局

JPanel启动 p = new JPanel() { private static final long serialVersionUID = 1L; public void paintComponent(Graphics g) { if(errors == 1) g.drawOval(215, 50, 75, 75); else if(errors == 2) g.drawOval(200,200,200,200); } }; 调用repaint方法 static void drawHead() { System.out.println(“Head”); errors = 1; p.removeAll(); p.revalidate(); p.repaint(); } 在repaint框架之前, 请看http://sofzh.miximages.com/java/XQlQeul.png 然后看起来像这样, http://i.imgur.com/RnVuUzt.png 我在想我的drawHead()方法有一个错误,但我似乎无法解决这个问题。 有谁知道发生了什么? 我想要的结果将是第一张图片,但是画了一个head 。

绘制缓冲图像

我试图在缓冲图像上绘图。 我能够在框架上获得图片,但它似乎并没有在图像上绘制。 如果我使用 BufferedImage bufferedImage = new BufferedImage(1280, 800,BufferedImage.TYPE_INT_RGB); 然后它似乎绘制字符串,但我想理想地绘制图像,因为我需要在图像上为项目绘制一些坐标。 任何指导都将受到高度赞赏。 请原谅不好的缩进 import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; public class drawTest extends JPanel { public void paint(Graphics g) { Image img = createImageWithText(); g.drawImage(img, 20,20,this); } private Image createImageWithText(){ BufferedImage bufferedImage = new […]

使用paintComponent镜像JFrame中的对象

我创建了一个类“镜像”对象。 类构造函数具有镜像坐标和方向。 在这个类中还有一个paintComponent方法。 我正在尝试使用此类在我的框架中创建一个镜像对象,并自动绘制一个带坐标和方向的镜像。 有“镜子”课。 我能这样做吗? import java.awt.Graphics; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JComponent; @SuppressWarnings(“serial”) class Mirror extends JComponent{ public static int xm, ym; public static boolean direction; public Mirror(int xmm, int ymm, boolean directionm){ xm=xmm; ym=ymm; direction=directionm;; repaint(); } public int getX(){ return xm; } public int getY(){ return ym; } public boolean getDirection(){ […]