Я уже сталкивался с этим раньше. Группировка больше предназначена для совокупных выражений или идентичных записей. Мои исследования показали, что лучше всего сделать что-то вроде этого:
SELECT u.*, p.method, p.id AS payment_id
FROM (
SELECT DISTINCT users.id
FROM users
) ur
JOIN payments p
ON p.id =
(
SELECT pt.id
FROM payments pt
WHERE pt.user_id = ur.id
ORDER BY
pt.id DESC
LIMIT 1
)
На основе описания Prajakta проекта я полагаю, что некоторое объяснение управления снимком экрана в порядке (я думаю, что John сделал превосходное задание объяснения, как получить снимок экрана с помощью java.awt. Класс робота). Помните, как Steve McLeod сказал, Java не может автоматически определять местоположение местоположения окна, которое Вы хотите получить на экране. Это важно, потому что класс Робота должен знать это местоположение, или автоматически или вручную от Вас.
Выноски, текст, изображения, и т.д. могут быть добавлены к снимку экрана через объект Graphics2D, который что Вы получаете при вызове createGraphics () методом BufferedImage снимка экрана. Я настоятельно рекомендую, чтобы Вы проверили API Graphics2D для лучше понимания то, к чему это способно. Я также рекомендую найти некоторые учебные руководства, возможно, начиная с 2D Графическое Учебное руководство от Sun. Книга, озаглавленная "Грязные Толстые клиенты", может также пригодиться.
Когда Вы наконец хотите сохранить этот измененный снимок экрана, можно использовать тот из методов "записи" класса ImageIO.
Вот очень простое, запустите к концу пример. Вам решать заполнить безотносительно необходимых деталей.
Я надеюсь эта справка немного!
Robot robot = new Robot();
// The hard part is knowing WHERE to capture the screen shot from
BufferedImage screenShot = robot.createScreenCapture(x, y, width, height);
Graphics2D graphics = screenShot.createGraphics();
// Add a label to the screen shot
Color textColor = Color.RED;
graphics.setColor(textColor);
graphics.drawString("Some text", textX, textY);
// Save your screen shot with its label
ImageIO.save(screenShot, "png", new File("myScreenShot.png"));
Возможно, java.awt. Класс робота помог бы со снимками экрана, хотя я не думаю, что это способно к определению местоположения отдельных окон. Что касается их "называют outs", класс Робота может также вызвать щелчки мышью и нажатия клавиш, если, именно это Вы имеете в виду.
Необходимо будет предоставить более определенную информацию для получения значимой справки. Прежде всего, Какие операционные системы это должно продолжить работать? Необходимо ли получить содержание отдельных окон или буквально всех дисплеев (Вы использовали неоднозначный термин, "выбрал экран другого приложения" в Вашем исходном сообщении). Что конкретно Вы хотите видеть, когда Вы, "добавляют выноска к полученному экрану"?
Robot r = new Robot();
Toolkit t = Toolkit.getDefaultToolkit();
Dimension d = t.getScreenSize();
Image i = r.createScreenCapture( 0, 0, d.width, d.height );
должен получить Вас целое изображение целого экрана. не уверенный, если это получает Вас целые вещи, если у Вас есть несколько мониторов, хотя...
Вероятно, Вы можете отсутствие Робота обходного решения способности знать границы окна, позволяя пользователю выбрать область, которую он хочет к снимку экрана.
У Вас есть два подхода, если опция является полным экраном, Вы не должны волновать, следовать за подходом Робота, описанным прежде.
Если applicatin для желаемой области:
Запустите требуемое приложение.
Возьмите полный экран рабочего стола.
Создайте полноэкранное приложение с помощью снимка экрана в качестве фона, ТОЛЬКО чтобы позволить пользователю выбирать область, где получить изображение (Вы запускаете с небольшого квадрата и позволяете пользователю перетащить, пока он не создает желаемый снимок экрана),
Передайте эту информацию Роботу и сделайте снимки экрана от той области.
Что-то вроде этого:
сопроводительный текст http://img136.imageshack.us/img136/8622/screencapturebb3.png
Если Вам не нравится опция использовать полный снимок экрана в качестве фона, можно использовать прозрачное окно.
И сделайте то же:-)
Вторая опция Aaahhh состоит в том, чтобы попытаться определить границы, анализируя изображения, но честно, я не думаю это стоящий того.
Существует третья опция, но секрет.
Если Вы хотите сделать снимок экрана определенного окна другого кода не-JAVA-приложения, я думаю, что необходимо будет написать некоторому собственному компоненту (т.е. не-Java) код. Взаимодействие между приложениями Java и приложениями не-Java на таком уровне является трудным.