====== JavaFX_howto ====== ===== Сборка/запуск =====
:!: Доп пакеты т.к. пакет FX выпилили в отдельный модуль, то и для сборки/запуска нужно еще что то использовать, находится все в [[https://openjfx.io/|OpenJFX]], по аналогии с JDK скачивается/ставится\\ Вроде как можно с помощью мавена включить зависимости в состав пакета, но что то не получается пока, включает все, но не запускается\\ Второй вариант, это таскать с собой эту jdk, указывая путь к ней при запуске, так работает java --module-path path/to/javafx/lib --add-modules javafx.controls,javafx.fxml -jar myproject.jar
:!: Проба1_javafx-maven-plugin [[https://github.com/openjfx/javafx-maven-plugin|git]]\\ pow.xml (...) org.openjfx javafx-controls 20.0.1 org.openjfx javafx-maven-plugin 0.0.8 com.sakeep.Launcher (...) maven clean compile package install На выходе файл 3кб, ест-но ничего не содержит в себе. и нихрена не запускается, даже на той же машине\\ возможно его надо мавеном запускать, но с ide-ешным хз как его там\\
:!: Добавим плагин maven-assembly-plugin (...) org.apache.maven.plugins maven-assembly-plugin package single com.sakeep.Launcher jar-with-dependencies (...) На выходе уже файл 8мб, содержит в себе все классы, запускается на рабочей машине, но не стартует на другой, ошибки "unamed module.."\\
:!:
===== Image =====
:!: Image to BufferedImage, save to File Image img = (откуда нибудь берем Image); BufferedImage bImage = new BufferedImage(img.getWidth(null)+20, img.getHeight(null)+20, BufferedImage.TYPE_INT_ARGB); Graphics2D bGr = bImage.createGraphics(); bGr.drawImage(img, 0, 0, null); bGr.dispose(); File outputfile = new File("itext_img.png"); ImageIO.write(bImage, "png", outputfile);
===== PDF ===== Для работы с pdf есть библиотека itext [[https://api.itextpdf.com/iText5/java/5.5.9/com/itextpdf/text/Image.html#setAlignment-int-|дока]]\\ Работать удобно, можно ШК организовать, но нет печати, для этого нашелся пакет [[https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox|Apache PDFBox]]
:!: Примеры Генерация ШК и сохранение com.itextpdf.text.Document document = new com.itextpdf.text.Document(); PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("tmp/itext_probe.pdf")); document.setPageSize(new com.itextpdf.text.Rectangle(58,40)); document.setMargins(2,2,2,2); document.open(); PdfContentByte pdfContentByte = pdfWriter.getDirectContent(); // Генерируем баркод Barcode128 barcode128 = new Barcode128(); barcode128.setCode("myString"); barcode128.setCodeType(Barcode128.CODE128); // Размеры barcode128.setSize(10); barcode128.setBarHeight(70); com.itextpdf.text.Image code128Image = barcode128.createImageWithBarcode(pdfContentByte, null, null); code128Image.scaleToFit(55,40); code128Image.setAbsolutePosition(10,10); document.add(code128Image); document.close(); Печать PDDocument pdfDoc = PDDocument.load(new File("tmp/itext_probe.pdf")); PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null); PrinterJob job = PrinterJob.getPrinterJob(); job.setPageable(new PDFPageable(pdfDoc)); job.setPrintService(printServices[0]); job.print();
===== Печать =====
:!: Пример печати изображения с текстом java.awt.Image awtImage = barcode128.createAwtImage(Color.black, Color.WHITE); PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null); PrinterJob job = PrinterJob.getPrinterJob(); // Размеры страницы для печати PageFormat pageForm = job.defaultPage(); Paper paper = pageForm.getPaper(); double width = 8d * 72d; double height = 4d * 72d; double margin = 1d * 72d; paper.setSize(width, height); //paper.setImageableArea(margin, margin, width - (margin * 2), height - (margin * 2)); paper.setImageableArea(0, 0, width, height); //pageForm.setOrientation(PageFormat.LANDSCAPE); pageForm.setPaper(paper); job.setPrintable(new Printable() { public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { if (pageIndex != 0) { return NO_SUCH_PAGE; } Graphics2D g2d = (Graphics2D) graphics; g2d.drawImage(awtImage, 40, 5, null); // Пишем текст g2d.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 9)); FontMetrics fm = g2d.getFontMetrics(); String text = selectedProd.getName(); // центрирование текста под ШК int centerBarcode = awtImage.getWidth(null) / 2 + 40; int centerText = fm.stringWidth(text) / 2; // добавляем начальный отступ, как у изображения (15) // добвялем высоту самого изображения и высоту текста int yForText= 5 + awtImage.getHeight(null) + fm.getAscent(); g2d.drawString(text, centerBarcode - centerText, yForText); // объем на второй строке text = selectedProd.getSelectedVolume().getName(); // центрирование текста под ШК centerText = fm.stringWidth(text) / 2; // добавляем начальный отступ, как у изображения (15) // добвялем высоту самого изображения и высоту текста yForText= 5 + awtImage.getHeight(null) + (fm.getAscent() * 2); g2d.drawString(text, centerBarcode - centerText, yForText); return PAGE_EXISTS; } }, pageForm); job.setPrintService(printServices[0]); //if (job.printDialog()) job.print();
===== Сообщения =====
:!: Alert import javafx.scene.control.Alert; ... Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setTitle("Information"); alert.setHeaderText(null); alert.setContentText("Hello World!"); alert.showAndWait();