Просто обратившись к треугольным нарушениям неравенства, надо надеяться, дополнительным фактором, для которого они оптимизируют, является здравый смысл. Вы не обязательно хотите самый короткий или самый быстрый маршрут, поскольку он может привести к хаос и разрушение . Если Вы хотите, чтобы Ваши направления предпочли главные маршруты, которые благоприятны для грузовика и могут справиться с отправлением каждого sat-nav-following драйвера вниз их, Вы быстро отбрасываете треугольное неравенство [1].
, Если Y является узкой жилой улицей между X и Z, Вы, вероятно, только хотите использовать ярлык через Y, если пользователь явно просит X-Y-Z. Если они просят X-Z, они должны придерживаться главных дорог, даже если это немного далее и берет немного дольше. Это подобно парадокс Braess - если все пытаются следовать самым коротким, самым быстрым маршрутом, получающаяся перегрузка означает, что это не самый быстрый маршрут ни для кого больше. Отсюда мы отклоняемся от теории графов в теорию игр.
[1] На самом деле, любая надежда, что произведенные расстояния будут функцией расстояния в математическом смысле, умирает, когда Вы позволяете односторонние дороги и теряете требование симметрии. Потеря треугольного неравенства также просто втирает соль в рану.
From the BufferedImage you can create a graphics object, which you can use to call paint on the JPanel, something like:
public BufferedImage createImage(JPanel panel) {
int w = panel.getWidth();
int h = panel.getHeight();
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
panel.paint(g);
g.dispose();
return bi;
}
You may need to make sure you set the size of the panel first.
В основном я создаю компонент что нужно записать в изображение но не отображается
ScreenImage объясняет, как делать то, что вы хотите.
Соответствующий раздел ScreenImage.java (с небольшими изменениями). layoutComponent
заставляет все кнопки появляться на изображении.
/**
* @return Renders argument onto a new BufferedImage
*/
public BufferedImage createImage(JPanel panel, int width, int height) {
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = bi.createGraphics();
panel.setSize(width, height); // or panel.getPreferedSize()
layoutComponent(panel);
panel.print(g);
g.dispose();
return bi;
}
private void layoutComponent(Component component) {
synchronized (component.getTreeLock()) {
component.doLayout();
if (component instanceof Container) {
for (Component child : ((Container) component).getComponents()) {
layoutComponent(child);
}
}
}
}
Взгляните на BasicTableUI. Средство визуализации ячеек рисуется на изображении без отображения, а затем на видимом компоненте таблицы.