プログラムに表示される文字列がありますが、文字列の出力を元の文字列と同じ画像に変換する方法を知りたいです。これができるかどうかはわかりません。
出力が正確にJTextAreaであることを望みます。これは可能ですか?もしそうなら、私は何を調べるべきですか?
assylias は私を打ち負かしましたが、私がとても近かったので、とにかく投稿しようと思いました
public class TestFrame extends JFrame {
private JTextArea text;
public TestFrame() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("Text");
setLayout(new BorderLayout());
text = new JTextArea();
add(new JScrollPane(text));
JButton btnPrint = new JButton("Print");
add(btnPrint, BorderLayout.SOUTH);
btnPrint.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
BufferedImage img = new BufferedImage(text.getWidth(), text.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = img.createGraphics();
text.printAll(g2d);
g2d.dispose();
try {
ImageIO.write(img, "png", new File("StringToGraphics.png"));
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
text.setWrapStyleWord(true);
text.setColumns(15);
text.setLineWrap(true);
text.setText("I have a string which is displayed in my program, but I'm wondering how I would convert the output of the string into an image identical to the original string. No idea if this can be done.\n\nI would like the output to be exactly what is is the JTextArea. Is this possible and if so what should I look into?");
setSize(200, 300);
setLocationRelativeTo(null);
setVisible(true);
}
}
これから
これに
ScreenImageを使用すると、メソッドを使用してコンポーネントから画像を作成できますcreateImage
。要約すると、これが内部で(JLabelを使用して)行うことです。
public static void main(String args[]) throws AWTException, IOException {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("test");
JLabel text = new JLabel("text");
frame.add(text);
frame.setPreferredSize(new Dimension(100, 100));
frame.pack();
frame.setVisible(true);
BufferedImage img = getImage(text);
try {
ImageIO.write(img, "png", new File("C:/temp/img.png"));
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
}
private static BufferedImage getImage(JComponent c) {
Rectangle region = c.getBounds();
BufferedImage image = new BufferedImage(region.width, region.height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
g2d.translate(-region.x, -region.y);
g2d.setColor(c.getBackground() );
g2d.fillRect(region.x, region.y, region.width, region.height);
c.paint(g2d);
g2d.dispose();
return image;
}