JFrame & JWindow Conflicts

У меня есть неисправный код, и я знаю, в чем проблема, но я не знаю, как реализовать решение. Я хочу создать программу, которая одним нажатием кнопки открывает PDF-файл во внутреннем PDF Reader. Пока это прекрасно работает, но так как загружается несколько секунд, я хотел реализовать заставку с логотипом с помощью JWindow. Но так как мой PDF Reader также использует GUI, они, кажется, конфликтуют, так как JWindow не появляется. Я знаю, что официальный класс SplashScreen рекомендуется как лучшее решение, но я не могу найти простое руководство по его использованию, поэтому я выбрал версию JWindow. Может кто-нибудь помочь мне реализовать решение для этого кода?

Помощь будет высоко ценится

Класс загрузочного экрана

package pdf;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JWindow;

public class loadingScreen extends JWindow {
BorderLayout bl = new BorderLayout();
JLabel imageLabel = new JLabel();
JPanel barPanel = new JPanel();
FlowLayout barPanelLayout = new FlowLayout();
JProgressBar progress = new JProgressBar();
ImageIcon icon;
public loadingScreen(ImageIcon icon) {

this.icon = icon;
try {
  lsInit();
}

catch(Exception e) {
  e.printStackTrace();
}



}

public void lsInit() throws Exception{

this.imageLabel.setIcon(this.icon);
this.getContentPane().setLayout(bl);
barPanel.setLayout(this.barPanelLayout);
barPanel.setBackground(Color.BLACK);
this.getContentPane().add(this.imageLabel,BorderLayout.CENTER);
//this.getContentPane().add(this.barPanel, BorderLayout.SOUTH);
//barPanel.add(this.progress,null);
this.setSize(new Dimension(500,500));
this.setVisible(true);
this.pack();

}



public void setScreenVisible(boolean b) {
setVisible(b);
 }

}

PDF Reader с использованием экрана загрузки

      package pdf;

  import java.awt.SplashScreen;
  import java.awt.event.KeyAdapter;
  import java.awt.event.KeyEvent;
  import java.awt.event.KeyListener;
  import java.awt.event.WindowAdapter;
  import java.awt.event.WindowEvent;
  import java.io.File;
  import java.io.IOException;
  import java.util.List;
  import javax.swing.ImageIcon;
  import javax.swing.JButton;
  import javax.swing.JFrame;
  import org.apache.pdfbox.pdfviewer.PDFPagePanel;
  import org.apache.pdfbox.pdmodel.PDDocument;
  import org.apache.pdfbox.pdmodel.PDPage;

  public class PDFViewer {
    int currentPageNo = 0;
    loadingScreen screen;

    public PDFViewer(String path) {

      File pdf_path = new File(path);
      try {
        splashScreenInit();
       PDDocument inputPdf = PDDocument.load(pdf_path);
        List<PDPage> allPgs = inputPdf.getDocumentCatalog().getAllPages();
        PDPage testPage = (PDPage)allPgs.get(0);

        JFrame testFrame = new JFrame();
        testFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        testFrame.addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent e) {
            try {
              inputPdf.close();
              testFrame.setVisible(false);
            } catch (IOException e1) {
              // TODO Auto-generated catch block
              e1.printStackTrace();
            }

          }
        });
        PDFPagePanel pdfPanel = new PDFPagePanel();
        pdfPanel.setPage(testPage);
        testFrame.add(pdfPanel);
        testFrame.setBounds(0, 0, pdfPanel.getWidth(), pdfPanel.getHeight()+50);
        testFrame.addKeyListener(new KeyAdapter() {

          @Override
          public void keyTyped(KeyEvent e) {
            // TODO Auto-generated method stub

          }

          @Override
          public void keyPressed(KeyEvent e) {
            if(e.getKeyCode() == KeyEvent.VK_DOWN ) {
              if(currentPageNo < allPgs.size()-1) {
                currentPageNo++;
                PDPage currentPage = (PDPage)allPgs.get(currentPageNo);
                pdfPanel.setPage(currentPage);
                testFrame.add(pdfPanel);
                testFrame.invalidate();
                testFrame.validate();
                testFrame.repaint();

              }
            }

            if(e.getKeyCode() == KeyEvent.VK_UP) {
              if(currentPageNo>0) {
                currentPageNo--;
                PDPage currentPage = (PDPage)allPgs.get(currentPageNo);
                pdfPanel.setPage(currentPage);
                testFrame.add(pdfPanel);
                testFrame.invalidate();
                testFrame.validate();
                testFrame.repaint();
              }
            }

          }

          @Override
          public void keyReleased(KeyEvent e) {
            // TODO Auto-generated method stub

          }

        });
        splashScreenDestruct();
        testFrame.setVisible(true);

      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }

    public void splashScreenInit() {
      ImageIcon logo = new ImageIcon("resources/BASF_logo_logotype.png");//Splashscrreen
      screen = new loadingScreen(logo);
      //screen.setLocationRelativeTo(null);
      //screen.setScreenVisible(true);
      //screen.setProgressMax(100);


    }

    public void splashScreenDestruct() {
      screen.setScreenVisible(false);
      screen = null;
    }

  }

0 ответов

Другие вопросы по тегам