Tag: graphics2d

了解BufferStrategy

我是java的新手。 我想做一个游戏。 经过大量的研究,我无法理解bufferstrategy如何工作..我知道基础知识..它创建了一个屏幕外的图像,你可以在以后放入你的windows对象..我得到了这个 public class Marco extends JFrame { private static final long serialVersionUID = 1L; BufferStrategy bs; //create an strategy for multi-buffering. public Marco() { basicFunctions(); //just the clasics setSize,setVisible,etc createBufferStrategy(2);//jframe extends windows so i can call this method bs = this.getBufferStrategy();//returns the buffer strategy used by this component } @Override public void paint(Graphics […]

将JPanel保存为图像高清质量

我试图将JPanel保存为图像(Png,Jpg,无论如何)但是使用Graphics2D时质量非常低。 我的JPanel主要包含文本,我想在A4纸张尺寸上打印面板4次,以便填充页面。 但是当我打印图像时,文字就像褪色一样。 我试图创建一个A3图像,然后将其打印到较小的A4尺寸。 质量增长很少,几乎无关紧要。 这是我用来生成图像的函数,基于这个我在这里找到的ScreenImage.Class: public void exportToPNG(JRootPane panel){ Dimension size = panel.getSize(); BufferedImage image = new BufferedImage( size.width, size.height * 4 /* use the same image 4 times */ , BufferedImage.TYPE_INT_RGB); Graphics2D g2 = image.createGraphics(); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); g2.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); […]

如何在java中撤消启动画面绘画

我是Java GUI的初学者,问题是我使用的是一个渐变作为背景的启动画面,我想写文本,擦除然后再编写新文本。 我管理写文本,甚至我可以编写新文本,但问题是新文本覆盖旧文本,旧文本没有被删除,因为我有一个渐变作为背景所以我不能使用.clearRect()或者.fillRect()的Graphics2D类,因为它们用纯色填充它,这是我的代码,可以帮助你指导我。 SplashScreen splash = SplashScreen.getSplashScreen(); int wpro = 0, strx = 491, stry = 414, prox = 491, proy = 389; Graphics2D str = splash.createGraphics(); str.setComposite(AlphaComposite.Clear); str.setPaintMode(); str.setColor(Color.WHITE); Font font = new Font(“”, 0, 13); str.setFont(font); str.drawString(“Loading Login Class …”, strx, stry); splash.update(); try{ Thread.sleep(5000); }catch(InterruptedException ex){ } str.drawString(“Loading Main Class …”, strx, […]

清晰的图形部分与底层图像

我正在制作各种各样的“游戏”,玩家必须点击在屏幕上弹跳的图像。 问题是屏幕处于黑暗中,鼠标光标是一个“闪光灯”,它“点亮”它周围的一个小圆圈。 我在一个类中有一个JFrame ,包括: public class GameFrame { public static void main(String[] args) throws IOException { Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); JFrame jf = new JFrame(“Flashlight Game”); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setSize(d); jf.setLocationRelativeTo(null); GamePanel gp = new GamePanel(); jf.add(gp); } } 我有另一个extends JPanel类。 以下是与我的问题相关的字段: private Point mouse; //location set by a MouseMotionListener private BufferedImage myImage; private int imageX; […]

使用Graphics2D绘制图像

我正在尝试使用java的Graphics2D在屏幕上绘制图像。 这是我正在使用的代码。 我希望看到一个图像在屏幕上稳定移动。 目前我可以看到图像,但除非我调整窗口大小,否则它不会移动,在这种情况下它会移动。 我勾画了下面的课程。 public class Tester extends JFrame { private static final long serialVersionUID = -3179467003801103750L; private Component myComponent; public static final int ONE_SECOND = 1000; public static final int FRAMES_PER_SECOND = 20; private Timer myTimer; public Tester (Component component, String title) { super(title); myComponent = component; } public void start () { […]

Swing中的增量图形

我试图在Swing中完成图形处理(画线等)的工作。 到目前为止,我见过的所有教程都声明了一个覆盖paintComponent的类,并且所有paintComponent方法都做了一些特定的事情,比如绘制一个红色正方形(尽管可能每次都在不同的位置绘制它)。 或者他们可能会绘制一些线条和形状,但paintComponent方法会同时执行所有操作。 我想弄清楚:假设我想在一个组件中绘制一个东西,然后在它上面绘制其他东西而不删除我之前绘制的东西。 我的第一个想法是让我的paintComponent覆盖调用回调。 import java.awt.*; import javax.swing.*; public class DrawTest { private interface GraphicsAction { public void action (Graphics g); } private static class TestPanel extends JPanel { private GraphicsAction paintAction; public void draw (GraphicsAction action) { paintAction = action; repaint(); } @Override public void paintComponent (Graphics g) { super.paintComponent (g); if (paintAction […]

将Graphics2d调整为JScrollPane

关于问题调整组件大小而不重新绘制是我的问题如何在窗体中创建可修改的自定义Graphics2d import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ZoomWithSelectionInViewport implements MouseWheelListener { private JComponent b; private int hexSize = 3; private int zoom = 80; private JScrollPane view; public ZoomWithSelectionInViewport() throws Exception { b = new JComponent() { private static final long serialVersionUID = 1L; @Override public Dimension getPreferredSize() { return new Dimension(700, 700); […]

在JFrame上绘制一条线

我试图使用Graphics 2D绘制一条线,但随后该线出现在JFrame中的所有其他组件上,从而使它们不可见。 我该如何解决这个问题? 这是代码: import javax.swing.*; import java.awt.*; import java.awt.geom.*; class Success extends JFrame{ public Success(){ JPanel panel=new JPanel(); getContentPane().add(panel); setSize(450,450); JButton button =new JButton(“press”); panel.add(button); } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; Line2D lin = new Line2D.Float(100, 100, 250, 260); g2.draw(lin); } public static void main(String []args){ Success s=new Success(); […]

调整图纸大小以匹配框架大小

我写了一个应用程序,自定义绘制paint()内的所有内容基于固定的像素位置。 然后我禁用框架的大小调整,使其始终可见。 但是,现在我想能够调整它,但我不想改变我的绘制代码。 我希望我可以抓住300×300平方的Graphics g对象并在我的所有绘制代码​​之后将其调整为JFrame当前大小,但我不知道我在做什么。 这里是示例代码。 在这里我希望100×100平方保持在中间,与resize的JFrame成比例: package DrawAndScale; import java.awt.Color; import java.awt.Graphics; public class DASFrame extends javax.swing.JFrame { public DASFrame() { setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); this.setSize(300, 300); } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new DASFrame().setVisible(true); } }); } @Override public void paint(Graphics g) { g.setColor(Color.BLACK); g.fill3DRect(100, 100, 100, 100, […]

为什么必须使用paintComponent方法在Java中绘制?

我希望这个问题不会被视为过于笼统。 我理解,要在JPanel上绘制,您可以覆盖paintComponent方法并将所有绘图代码放在该方法中。 我的问题是为什么! 为什么Java似乎不允许/提供使用panel.drawLine(x1,y1,x2,y2)或panel.drawText(text,x,y)等方法绘图? 在delphi中这一切都变得如此简单。 必须有一个我无法弄明白的理由。