Loading ...

In sostanza vediamo come mandare in stampa più immagini contemporaneamente usando Java; ogni immagine occupa una pagina, quindi non dobbiamo occuparci di sistemare più immagini in una pagina.

Per fare questo useremo una classe che implementa Printable (di AWT).

A questa classe passeremo un array di BufferedImage, sul quale itereremo per "sistemare" e stampare le immagini.

Oggi ho caricato su GitHub un programmino per visualizzare le immagini con galleria.

Ho usato Java (per la precisione compilato in Java 8).

Ho scoperto per sbaglio il componente HTMLEditor di JavaFX, che è in pratica un editor HTML completo di toolbar con tutti gli strumenti che vi servono.

Mi ricorda molto TinyMCE per intenderci.

Solo che io ho la necessità di mostrarlo in sola lettura, e non ho bisogno di mostrare la toolbar in questo caso.

Ho scoperto che è possibile nasconderla, anche se non esiste un metodo diretto per farlo.

Una cosa che mi ha sempre dato fastidio di JavaFX è il suo autofocus in avvio di finestra.

Prendiamo ad esempio il layout che sto usando per un programma:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.SeparatorMenuItem?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.ToolBar?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.control.Separator?>
<?import javafx.scene.control.Hyperlink?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.ToggleGroup?>

<BorderPane fx:id="mainPane" xmlns="http://javafx.com/javafx/8.0.121"
            xmlns:fx="http://javafx.com/fxml/1"
            fx:controller="com.mp.photogallery.MainController">
    <top>
        <VBox>
            <children>
                <MenuBar fx:id="menuBar">
                    <menus>
                        <Menu text="File">
                            <items>
                                <MenuItem accelerator="Ctrl+O" 
onAction="#openDirectory" text="Open phpto directory"/>
                                <MenuItem accelerator="Ctrl+P" 
onAction="#printImages" text="Print images"/>
                                <SeparatorMenuItem/>
                                <MenuItem accelerator="Ctrl+A" 
onAction="#about" text="About"/>
                                <MenuItem accelerator="Ctrl+Q" onAction="#quit" text="Quit"/>
                            </items>
                        </Menu>
                    </menus>
                </MenuBar>
            </children>
            <children>
                <ToolBar>
                    <items>
                        <Button text="Open photo directory" onAction="#openDirectory">
                            <graphic>
                                <ImageView fitHeight="30.0" fitWidth="30.0" 
pickOnBounds="true" preserveRatio="true">
                                    <image>
                                        <Image url="open.png"/>
                                    </image>
                                </ImageView>
                            </graphic>
                        </Button>
                        <Separator orientation="VERTICAL"></Separator>
                        <Button text="Print images" onAction="#printImages">
                            <graphic>
                                <ImageView fitHeight="30.0" fitWidth="30.0" 
pickOnBounds="true" 
preserveRatio="true">
                                    <image>
                                        <Image url="print.png"/>
                                    </image>
                                </ImageView>
                            </graphic>
                        </Button>
                        <Separator orientation="VERTICAL"></Separator>
                        <Button text="Create PDF" onAction="#createPdf">
                            <graphic>
                                <ImageView fitHeight="30.0" fitWidth="30.0" 
pickOnBounds="true" preserveRatio="true">
                                    <image>
                                        <Image url="pdf.png"/>
                                    </image>
                                </ImageView>
                            </graphic>
                        </Button>
                        <Separator orientation="VERTICAL"></Separator>
                        <fx:define>
                            <ToggleGroup fx:id="con_nome"/>
                        </fx:define>
                        <RadioButton text="With name" 
toggleGroup="$con_nome" fx:id="radioSi"/>
                        <RadioButton text="Without name" 
toggleGroup="$con_nome" fx:id="radioNo" selected="true"/>
                    </items>
                </ToolBar>
            </children>
        </VBox>
    </top>
    <center>
        <ScrollPane pannable="true" fx:id="imageScrollPane">
            <content>
                <ImageView fx:id="currentImage" preserveRatio="true"/>
            </content>
        </ScrollPane>
    </center>
    <right>
        <VBox>
            <children>
                <Label fx:id="lblInfo" maxWidth="200" minWidth="200" wrapText="true">
                    <padding>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0"/>
                    </padding>
                </Label>
            </children>
            <children>
                <Separator></Separator>
            </children>
            <children>
                <Hyperlink fx:id="lblMap" maxWidth="200" 
minWidth="200" 
wrapText="true" visible="false" onAction="#openMap">
                    <padding>
                        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0"/>
                    </padding>
                </Hyperlink>
            </children>
        </VBox>
    </right>
    <bottom>
        <ListView fx:id="listViewImages" maxHeight="200" orientation="HORIZONTAL"/>
    </bottom>
</BorderPane>

La classe che ho postato oggi su GitHub, serve per lanciare finestre in JavaFX usando layout FXML.

La classe ha due metodi statici:

  • uno si limita a lanciare la finestra / controller
  • l'altro ritorna FXMLLoader, utile se si voglio fare altre operazioni, come lanciare metodi del controller dopo aver avviato la finestra