У меня есть JPanel, на котором я рисую несколько пользовательских JComponents, используя обычный метод paintComponent (Graphics g). Я использую JLayeredPane для управления порядком отображения пользовательских компонентов следующим образом:
public Class MyPanel extends JPanel {
private JLayeredPane layeredPane = new JLayeredPane();
private JComponent component1;
private JComponent component2;
public MyPanel() {
super();
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
component1 = new CustomComponent1();
layeredPane.add (component1, new Integer(0));
component2 = new CustomComponent2();
layeredPane.add (component2, new Integer(1));
add (layeredPane);
}
public void resizePanel(Graphics g, int newWidth, int newHeight) {
component1.setBounds (f(x), f(y), f(newWidth), f(newHeight));
component2.setBounds (f(x), f(y), f(newWidth), f(newHeight));
}
public void paintComponent(Graphics g) {
if ((getWidth() != oldWidth) || (getHeight() != oldHeight)) {
oldWidth = getWidth();
oldHeight = getHeight();
resizePanel (g, getWidth(), getHeight());
}
super.paintComponent(g);
}
Теперь я хотел бы экспортировать эту панель в файл JPEG, но с другим размером. Когда я использую следующий код, он успешно создает / экспортирует файл JPEG нужного размера, но также обновляет версию панели изображения моего экрана до нового размера! Хлоп!
public void export(File file, int width, int height)
throws IOException
{
BufferedImage scaledImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = scaledImage.createGraphics();
resizePanel (g2, width, height);
super.paintComponent (g2);
try {
OutputStream out = new FileOutputStream(file);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(scaledImage);
out.close();
} catch (FileNotFoundException e) {
throw new IOException ("Unable to export chart to ("
+ file.getAbsolutePath() + "): " + e.getLocalizedMessage());
} finally {
g2.dispose();
}
}
Как я могу «нарисовать» изображение, подходящее для экспорта, но на самом деле не вызвать отображение этого нового изображения?
Спасибо!
Ну, я снова вернулся к этой проблеме .....
Сцена, которую я рисую, включает в себя некоторый текст, и теперь конечный пользователь хочет, чтобы график экспортировался в «портретном» соотношении сторон. Поскольку я не перерисовываю сцену в новых измерениях, а просто масштабирую изображение, это приводит к серьезному сжатию текста по горизонтали.
Так или иначе?