只使用绘画方法,我的图像最初不会显示.一旦我最小化了Java窗口并调整其大小,图像就会显示出来.有什么代码我不见了吗?
public class Lil extends JFrame {
Image image = Toolkit.getDefaultToolkit().getImage("images/Untitled.png");
public Lil(){
setTitle("flame");
setBackground(Color.WHITE);
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
}
public void paint(Graphics g){
g.clearRect(0, 0, 400, 400);
g.drawImage(image, 60, 25, null);
//repaint();
}
public static void main(String [] args){
new lil();
}
}
Run Code Online (Sandbox Code Playgroud) 我试图完成一个绘制图形并将其写入PDF的示例,但我不断收到PDF没有页面的错误.如果我在打开后用document.add()添加一些简单的东西就可以正常工作,我只是看不到图形.这是我的代码:
Document document = new Document();
PdfWriter writer = new PdfWriter();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition",
" attachment; filename=\"Design.pdf\"");
writer = PdfWriter.getInstance(document, response.getOutputStream());
document.open();
PdfContentByte cb = writer.getDirectContent();
Graphics2D graphics2D = cb.createGraphics(36, 54);
graphics2D.drawString("Hello World", 36, 54);
graphics2D.dispose();
document.close();
Run Code Online (Sandbox Code Playgroud)
我是否必须执行其他操作才能将图形添加到文档中,或者我的语法不正确?
虽然我没有做一些动画或绘制非常复杂的图形.
我需要(有点)双缓冲来绘制几个基元.在应用程序中,用户输入Shape的名称,后跟相关参数,并在缓冲区上绘制该形状,然后在屏幕上绘制.例如命令是RECT 100, 50, 200, 120.
对于持久性,我可以将所有命令存储在列表中,在
public void paintComponent(Graphics g)JPanel中我逐个绘制它们.
但这是非常低效的,因为每次遍历列表并使用哈希映射来调用(或调度)相关的形状绘图界面.
我可以如何以及在什么类型的缓冲区绘制?不同的方法如何利用这个缓冲区?
另外有一种方便的方法可以使用缓冲区撤消以前的绘制吗?或者每次撤消时我是否需要重绘缓冲区?
谢谢,我不想要完整的代码,但是相关的类名和小伪代码是值得赞赏的.
我开发了一个带有椭圆形和按钮的swing应用程序,其输出如下所示,代码如下: -

码:-
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class AlphaCompositeDemo extends JFrame{
AlphaCompositeDemo()
{
super("AlphaComposite Demo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,400);
setLayout(new FlowLayout());
setBackground(new Color(0.2f,0.7f,0.1f,0.4f));
comp c=new comp();
add(c);
add(new JButton("Click"));
setVisible(true);
}
public static void main(String args[])
{
JFrame.setDefaultLookAndFeelDecorated(true);
SwingUtilities.invokeLater(new Runnable(){public void run(){new AlphaCompositeDemo();}});
}
}
class comp extends JComponent
{
public void paintComponent(Graphics g)
{
Graphics2D g2=(Graphics2D)g.create();
g2.setComposite(AlphaComposite.SrcOver);
g2.setColor(Color.RED);
g2.fillOval(50, 50, 220, 120);
}
public …Run Code Online (Sandbox Code Playgroud) 我开发了一个应用程序来产生以下输出: -

我重写了JPanel的getPrefferredSize,但是为什么我在更改大小时没有观察到输出的任何变化.即使我将大小设置为0,0图表根本没有翻译,我得到的输出与上面显示的相同.
这是我的完整代码: -
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Skeleton extends JFrame{
Skeleton()
{
super("Donut");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,400);
add(new Board());
setVisible(true);
}
public static void main(String args[])
{
SwingUtilities.invokeLater(new Runnable(){public void run(){new Skeleton();}});
}
}
class Board extends JPanel
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
RenderingHints rh=new RenderingHints(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
//the following statement has no noticeable effect.
rh.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g2.setRenderingHints(rh); …Run Code Online (Sandbox Code Playgroud) 我们知道有一个RadialGradientPaint用Java 命名的类,我们可以使用它来绘制圆形渐变画.
但我想要一个椭圆形(椭圆形)GradientPaint.如何实现椭圆形GradientPaint?
我正在尝试编写一个小方法,该方法获取BufferedImage图像和新的宽度和高度,并通过根据图像向左/右或顶部/底部添加透明边框来缩放图像以保持纵横比。缩放效果很好,但对于我的生活,我无法让边框变得透明。
到目前为止,我在 pastebin.com上发布了以下代码,它可以很好地进行缩放。
我已经阅读了很多手册和其他 SO 问题,但无济于事。我尝试了大量的填充、复合类型、图像类型等排列。有时我会得到蓝色背景,有时是白色,但它似乎永远不会是透明的。
BufferedImage newImg = new BufferedImage(newWidth, newHeight, img.getType());
Graphics2D g = newImg.createGraphics();
g.setColor(Color.WHITE);
g.fillRect(0, 0, newWidth, newHeight);
g.drawImage(img, x, y, x + scaledWidth, y + scaledHeight, 0, 0,
currentWidth, currentHeight, Color.WHITE, null);
g.dispose();
return newImg;
Run Code Online (Sandbox Code Playgroud)
知道我需要调用什么 Graphics2D 来使Color.WHITE背景透明并在新图像上绘制旧图像吗?谢谢你的帮助。
编辑:
事实证明,我遇到的问题是我试图用 JPEG 图像生成透明颜色。JPEG 不支持透明度。呃。
我目前正在开发一个Java游戏,我试图在不使用任何图像文件的情况下创建背景.图像由分成4个三角形的正方形组成,每个三角形都是不同的颜色.
如果有人能指出我使用Graphics2D然后将其保存到a BufferedImage,那就太好了.
当鼠标快速移动时,有谁知道如何绘制实线?当我慢慢移动鼠标时,线条被绘制为实线,但是当鼠标快速移动时,线条就像虚线一样绘制,如此处所示.
绘制线条的代码目前是这样的:
private final class MouseL extends MouseAdapter implements MouseMotionListener
{
@Override
public void mouseClicked(MouseEvent e)
{
Point p = e.getPoint();
int half = brushDiameter / 1200;
Graphics2D g = getImage().createGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setPaint(getColor());
g.fillOval(p.x - half, p.y - half, brushDiameter, brushDiameter);
g.dispose();
repaint(p.x - half, p.y - half, brushDiameter, brushDiameter);
}
@Override
public void mouseDragged(MouseEvent e)
{
mouseClicked(e);
}
Run Code Online (Sandbox Code Playgroud)
但我想改变它,使线看起来很稳固.非常感谢任何有助于实现这一目标的帮助.
好的,所以有一个Line2D和一个Rectangle2D可以用来Graphics2D.draw()代替Graphics.drawLine()和Graphics.drawRectangle().
是否有类似的"升级" Graphics.drawPolyLine()?
graphics2d ×10
java ×10
swing ×4
image ×2
awt ×1
buffer ×1
drawing ×1
imageicon ×1
itext ×1
jpanel ×1
mouseevent ×1
netbeans-7 ×1
paint ×1
spring-mvc ×1
timer ×1
translucency ×1
transparency ×1