我正在尝试为特定目的创建一些特殊组件,在该组件上我需要绘制一个HTML字符串,这是一个示例代码:
public class MyComponent extends JComponent{
public MyComponent(){
super();
}
protected void paintComponent(Graphics g){
//some drawing operations...
g.drawString("<html><u>text to render</u></html>",10,10);
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,drawString方法似乎没有识别HTML格式,它愚蠢地绘制字符串就像它一样.
有没有办法让这项工作?
我正在尝试编写一个2D游戏引擎,我正在尝试实现一个视口系统,这样当我在某个视口中绘图时,游戏坐标将转换为屏幕坐标,而无需手动进行转换.
我想要做的是创建一个Graphics2D添加setViewport方法的包装器.
我看到的方式有两种选择:
创建一个具有a实例Graphics2D并且具有与Graphics2Dplus 相同的方法的类,setViewport并且只调用Graphics2D实例上的相应方法.
子类Graphics2D,只需添加一个setViewport方法,然后只是转换Graphics2D为这个新类
我试过#2,因为#1似乎非常不切实际但遇到了一个ClassCastException.我无法演员Graphics或Graphics2D这个新班级.当我打印的图形对象投(之前Graphics或Graphics2D),两者出来的sun.java2d.SunGraphics2D.
尝试子类化和强制转换时,我做了一些根本错误的事情吗?如果没有,我该如何解决这个问题?
这是我的代码,它的实际工作,不完美,但它的问题是,调整大小的缩略图未粘贴在白色绘制的矩形,打破了图像纵横比,这里是代码,可能有人建议我修复好吗,拜托?
谢谢
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class ImageScalerImageIoImpl implements ImageScaler {
private static final String OUTPUT_FORMAT_ID = "jpeg";
// Re-scaling image
public byte[] scaleImage(byte[] originalImage, int targetWidth,
int targetHeight) {
try {
InputStream imageStream = new BufferedInputStream(
new ByteArrayInputStream(originalImage));
Image image = (Image) ImageIO.read(imageStream);
int thumbWidth = targetWidth;
int thumbHeight = targetHeight;
// Make sure …Run Code Online (Sandbox Code Playgroud) G'day,我有JPanel,上面有一些Line2D对象.问题是当我画这条线时,它不会像我想要的那样出现.线条不平滑,很难用词来解释,所以我发布了一张图片,

缩放区域,

如何让它们看起来更光滑而不是皱纹.
谢谢
我正在尝试使用Graphics2D 绘制一条线但是然后该线出现在所有其他组件中,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();
s.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud) 我是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 g){
g.drawString("My game",20,40);//some string that I don't know why it does not show
//guess is 'couse g2 overwrittes all the frame..
Graphics2D g2=null;//create a child object of …Run Code Online (Sandbox Code Playgroud) 如何在没有类(扩展JFrame)的情况下绘制对象?我找到了getGraphics方法,但它没有绘制对象.
import javax.swing.*;
import java.awt.*;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setSize(600, 400);
JPanel panel = new JPanel();
frame.add(panel);
Graphics g = panel.getGraphics();
g.setColor(Color.BLUE);
g.fillRect(0, 0, 100, 100);
}
}
Run Code Online (Sandbox Code Playgroud) Graphics和Graphics2D有什么区别?
Graphics2D是否扩展了Graphics?
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawRect(25, 25, 20, 20); //use Graphics to paint rectangle
Graphics2D g2 =(Graphics2D)g;
g2.drawRect(0, 0, 20, 20); // use Graphics2D to paint rectangle
}
Run Code Online (Sandbox Code Playgroud) 下面的代码可以正常工作,但每次运行时都会将字体文件的副本留在临时目录中.这些文件名为+ ~JF7154903081130224445.tmp,其中每个创建的文件的数字似乎是随机的.
InputStream fontStream = this.getClass().getResourceAsStream("handsean.ttf");
Font baseFont = Font.createFont(Font.TRUETYPE_FONT, fontStream);
fontStream.close();
Run Code Online (Sandbox Code Playgroud)
我在sun.com的论坛和网络上的其他资源中发现了几年的讨论,这被认为是JDK中的一个错误,从1.5.0_06升级到1.5.0_08可以解决问题; 但是,我使用的版本是更高版本(1.6.0_13).
我尝试通过在字体相关操作完成后删除文件来解决问题,但此时文件被锁定.只有在Web应用程序停止后才能删除这些文件.
有人有解决方案吗?
我正在使用Java的Graphics2D来生成图形的图形表示.我也在使用ImageIO来编写PNG文件.(ImageIO.write(image, "png", out);)
我想知道如何编写JUnit测试来测试生成的图形是否符合预期.我可以预先生成PNG文件,但如果在不同的机器上字体有点不同怎么办?
graphics2d ×10
java ×10
swing ×5
fonts ×1
graphics ×1
html ×1
image ×1
inheritance ×1
jcomponent ×1
jframe ×1
junit ×1
resize ×1