我如何在javaFx中禁用PDF阅读器上的加载按钮

问题描述 投票:-1回答:1

我使用boxPdf创建了一个pdf阅读器。enter image description here我的项目包含4个Java文件和ui.fxml。主文件(main.java)控制器(controller.java)显示pdf文件类(pdfDisplay.java)和pdf模型(pdfModel.java)。加载按钮是在controller.java上实现的,当我单击它时,我将使用关闭按钮加载pdf文件。![enter image description here我的问题是:显示pdf时,我如何禁用加载按钮,直到单击关闭按钮?因为如您所见,在第二张图片中,总是启用了加载按钮,即使显示了第一个文件,用户也可以加载另一个文件,这是我不想要的。 另一个答案:当我关闭显示的pdf并加载另一个我得到的文件时:子代:添加了重复子代:父=调试器中的AnchorPane [id = anchor,styleClass = root]这是我的代码项目main.java

package application;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

/**
 *@author toru
 */
public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        final Parent parent = FXMLLoader.load(getClass().getResource("ui.fxml"));
        parent.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
        primaryStage.setTitle("Vet0b00k5");
        primaryStage.setScene(new Scene(parent,600, 400));
        primaryStage.show();
     }
public static void main(String[] args) {
        launch(args);
    }

}

controller.java

package application;

import java.io.File;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javafx.stage.FileChooser;
import java.nio.file.Path;

public class controller{

     @FXML 
     private AnchorPane anchor = new AnchorPane();
     Button loadButton=new Button ("Load");
     pdfDisplay pdfFileOpened= new pdfDisplay();
     HBox menuLoadB = new HBox (1);
     Path Path;
     PdfModel model= new PdfModel();


    public void initialize(){

        /*this part doesn't work*/
        if(Path==null){
            loadButton.setDisable(false);
            }
            else{
            loadButton.setDisable(true);
            }
        /*this part doesn't work*/

        menuLoadB.getChildren().add(loadButton);
        anchor.getChildren().addAll(menuLoadB);
        loadButton.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                loadFile();

            }
        });

    }

 void loadFile() {

    FileChooser fileChooser = new FileChooser();
    fileChooser.setTitle("Upload File Path");
    fileChooser.getExtensionFilters().addAll(

    new FileChooser.ExtensionFilter("PDF", "*.pdf"));
    File file = fileChooser.showOpenDialog(anchor.getScene().getWindow());

    if (file != null && file.toPath()!=null) {

        String f=file.getPath();
        pdfFileOpened.setModel(f);
        anchor.getChildren().addAll(pdfFileOpened.affichePDF());

    } else  {
        System.out.println("error"); // or something else
    }

 }
}

pdfDisplayClass.java

package application;

import java.nio.file.Path;
import java.nio.file.Paths;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.control.Button;
import javafx.scene.control.Pagination;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.ScrollPane.ScrollBarPolicy;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;


public class pdfDisplay{


         Button xButton=new Button ("X");


         HBox menu = new HBox (1);

         Pagination pagination;
         Path Path;
         PdfModel model= new PdfModel();
         ScrollPane scrollPane = new ScrollPane();
         VBox vboxRoot= new VBox();
         ImageView imageView = new ImageView();



     public VBox createPage(int pageIndex) {


         VBox box = new VBox();
            imageView = new ImageView(model.getImage(pageIndex));
            imageView.setFitWidth(model.afficheLargeur()*1.25);
            imageView.setFitHeight(model.afficheHauteur()*1.25);

                VBox.setMargin(scrollPane, new Insets(10, 50, 10, 50));
                scrollPane.prefHeightProperty().bind(vboxRoot.heightProperty());
                scrollPane.setPannable(true);
                scrollPane.setContent(imageView);
                scrollPane.setVbarPolicy(ScrollBarPolicy.AS_NEEDED);
                scrollPane.setHbarPolicy(ScrollBarPolicy.AS_NEEDED);
                scrollPane.setStyle("-fx-border-color:red;");

                pagination.setStyle("-fx-border-color:black;");
                box.getChildren().add(scrollPane);

                return box;
        }
     void setModel(String f) {
            model= new PdfModel(Paths.get(f));
     }
     Path getModel() {

            return model.getPath();
     }
     VBox affichePDF() {

            pagination = new Pagination();
            pagination.setPageCount(model.nombreDePages());
            pagination.setPageFactory((Integer pageIndex) -> { return createPage(pageIndex);});



            xButtonAction();
           VBox.setMargin(pagination, new Insets(10, 10, 10, 10));
            VBox.setMargin(menu, new Insets(10, 10, 10, 10));

            menu.getChildren().addAll(xButton);
            menu.setStyle("-fx-border-color:yellow;");
            vboxRoot.setStyle("-fx-border-color:yellow;");
            vboxRoot.getChildren().addAll(menu,pagination);

            AnchorPane.setTopAnchor(vboxRoot, 50.0);
            AnchorPane.setRightAnchor(vboxRoot, 10.0);
            AnchorPane.setBottomAnchor(vboxRoot, 40.0);
            AnchorPane.setLeftAnchor(vboxRoot, 40.0);

           return vboxRoot;
        }

     void xButtonAction() {

         xButton.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {

                    fermerFichier();
                }
            });

     }

     void fermerFichier() {
            pagination.setPageFactory( (Integer pageIndex) -> { return null;} );
            menu.getChildren().removeAll(xButton);
            vboxRoot.getChildren().removeAll(menu,pagination);
            model.setPath(null);
            model.fermer();

        }

}

pdfmodel.java

package application;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.file.Path;
//import java.util.logging.Logger;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.image.Image;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.rendering.PDFRenderer;

/**
 * @author toru
 */
class PdfModel {
    //private static final Logger logger = Logger.getLogger(PdfModel.class.getName());

    private PDDocument document;
    private PDFRenderer renderer;

    Path chemin;

    PdfModel() {

    }

    PdfModel(Path path) {
        try {
            chemin=path;
            document = PDDocument.load(path.toFile());
            renderer = new PDFRenderer(document);
        } catch (IOException ex) {
            throw new UncheckedIOException("PDDocument thorws IOException file=" + path, ex);
        }
    }

    int nombreDePages() {
        return document.getPages().getCount();
    } 



    void fermer() {
        try {
            document.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    void setPath(Path pPays)
      {
       chemin = pPays;
      }

    Path getPath()
      {
       return chemin;
      }



double afficheHauteur() {

        PDPage page = document.getPage(document.getNumberOfPages() - 1);
         PDRectangle pageSize = page.getMediaBox();

         return pageSize.getHeight();

    }

   double afficheLargeur() {

        PDPage page = document.getPage(document.getNumberOfPages() - 1);
         PDRectangle pageSize = page.getMediaBox();

         return pageSize.getWidth();


    }
    Image getImage(int pageNumber) {
        BufferedImage pageImage;

        try {
            pageImage = renderer.renderImage(pageNumber,3);
        } catch (IOException ex) {
            throw new UncheckedIOException("PDFRenderer throws IOException", ex);
        }
        return SwingFXUtils.toFXImage(pageImage, null);

    }

}

ui.fxml

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

<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>

<AnchorPane fx:id="anchor" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.controller">
   <children>
      <HBox prefHeight="50.0" prefWidth="400.0" />
   </children>
</AnchorPane>

您可以下载my eclipse projectthe pdf box

感谢您抽出宝贵的时间阅读所有这些内容>>

最诚挚的问候

我使用boxPdf创建了一个pdf阅读器。我的项目包含4个Java文件和ui.fxml主文件(main.java)控制器(controller.java)显示pdf文件类(pdfDisplay.java)和pdf模型(...

button javafx disable
1个回答
0
投票

这是解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.