Java 我无法通过JFileChooser加载图形并实际显示它

Java 我无法通过JFileChooser加载图形并实际显示它,java,swing,jfilechooser,graphstream,Java,Swing,Jfilechooser,Graphstream,因此,我有一个从JFrame继承的类,它有两个JSplitPane和一个菜单栏。一个JSplitPane的顶部有一个JSplitPane,底部有一个textarea,另一个JSplitPane左右各有两个JPanel。我想解析我通过JFileChooser选择的一个pnml文件(或更多,但我现在只是想让一个工作)。我可以选择一个文件,并通过打印文件名对其进行测试,这是可行的,但我无法在左侧JPanel中实际显示图形。也许有人能帮我。这是我的班级: 导入pnml_parsing.Parser;

因此,我有一个从JFrame继承的类,它有两个JSplitPane和一个菜单栏。一个JSplitPane的顶部有一个JSplitPane,底部有一个textarea,另一个JSplitPane左右各有两个JPanel。我想解析我通过JFileChooser选择的一个pnml文件(或更多,但我现在只是想让一个工作)。我可以选择一个文件,并通过打印文件名对其进行测试,这是可行的,但我无法在左侧JPanel中实际显示图形。也许有人能帮我。这是我的班级:


导入pnml_parsing.Parser;
导入java.awt.BorderLayout;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.ActionEvent;
导入java.io.File;
导入java.util.array;
导入javax.swing.JComponent;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JSplitPane;
导入javax.swing.JTextArea;
导入javax.swing.JMenuBar;
导入javax.swing.JToolBar;
导入javax.swing.JMenu;
导入javax.swing.JMenuItem;
导入javax.swing.JButton;
导入javax.swing.JFileChooser;
导入javax.swing.filechooser.FileFilter;
导入org.graphstream.ui.swingViewer.ViewPanel;
导入org.graphstream.ui.view.Viewer;
导入org.graphstream.ui.view.ViewerPipe;
公共类Fenster_测试扩展JFrame{
/**默认串行版本ID*/
私有静态最终长serialVersionUID=1L;
专用控制器;
私有视图面板视图面板1;
私有视图面板视图面板2;
专用JLabel状态标签;
JTextArea textfield=新的JTextArea();
JSplitPane leftRight=新的JSplitPane();
JComponent bottom=新的JScrollPane(textfield);
JPanel jpnlGraph=newjpanel(newborderlayout());
JPanel resultGraph=newjpanel(newborderlayout());
JLabel标签=新的JLabel();
JToolBar tbar=新的JToolBar();
JMenuBar mbar=新JMenuBar();
JMenu datei=新JMenu(“datei”);
JButton reset=新JButton(“reset”);
JButton markerplus=新JButton(“+”);
JButton markerminus=新JButton(“-”);
JButton loescheEG=新的JButton(“如löschen”);
JMenuItem dateiwahl=新的JMenuItem(“Datei auswählen”);
JMenuItem dateienwahl=新的JMenuItem(“Dateien auswählen”);
JFileChooser jfc=新的JFileChooser();
文件[]文件;
最终JSplitPane topBottom=新JSplitPane(JSplitPane.垂直拆分);
公共Fenster_试验(字符串滴度){
超级(滴度);
jfc.setMultiSelectionEnabled(真);
setFileFilter(新的FileFilter(){
公共字符串getDescription(){
返回“PNML日期(*.PNML)”;
}
公共布尔接受(文件f){
if(f.isDirectory()){
返回true;
}否则{
字符串文件名=f.getName().toLowerCase();
返回filename.endsWith(“.pnml”)| filename.endsWith(“.pnml”);
}
}
});
System.setProperty(“org.graphstream.ui.renderer”,
“org.graphstream.ui.j2dviewer.J2DGraphRenderer”);
//埃尔泽格控制器
//控制器=新控制器(此);
//设置框架的布局
此.setLayout(新的BorderLayout());
//石墨板的初始尺寸和初始尺寸
//initPanelGraph();
//埃因贝滕·德斯杰帕内尔风景区
//jpnlGraph=newjpanel(newborderlayout());
//jpnlGraph.add(BorderLayout.CENTER,viewPanel1);
//这是一个很好的例子
添加(jpnlGraph,BorderLayout.CENTER);
mbar.add(日期i);
tbar.添加(loescheEG);
tbar.add(markerplus);
tbar.add(markerminus);
tbar.添加(重置);
datei.add(dateiwahl);
//initPanelGraph();
控制器=新控制器(jpnlGraph);
label.setText(“”);
jpnlGraph.add(标签);
datewahl.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
jfc.showOpenDialog(空);
files=jfc.getSelectedFiles();
if(files==null){
System.out.println(“Keine Datei(en)ausgewählt”);
}否则{
Parser Parser=新的解析器(文件[0]);
initParser();
parser.parse();//解析文件
initPanelGraph();
}
如果(files.length>1){
数组。排序(文件);
//梅赫雷达蒂安·杜奇劳芬

对于(inti=0;i,因为您没有提供一个最小的、可运行的示例,所以我创建了自己的示例

下面是一个简单的图像显示GUI

我用一个绘图
JPanel
创建了一个
JFrame
。创建
JFrame
的代码在
run
方法中。绘图
JPanel
是在一个单独的类中创建的。我扩展了
JPanel
,因为我想覆盖
paintComponent
方法

使用此代码创建一个简单的GUI,其中显示
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileNameExtensionFilter;

public class ImageDisplay implements Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new ImageDisplay());
    }
    
    private ImageDisplayModel model;
    
    private ImagePanel imagePanel;
    
    private JFrame frame;
    
    public ImageDisplay() {
        this.model = new ImageDisplayModel();
    }
    
    @Override
    public void run() {
        frame = new JFrame("Image Display");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setJMenuBar(createMenuBar());
        
        imagePanel = new ImagePanel(model);
        frame.add(imagePanel, BorderLayout.CENTER);
        
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }
    
    private JMenuBar createMenuBar() {
        JMenuBar menubar = new JMenuBar();
        
        JMenu filemenu = new JMenu("File"); 
  
        JMenuItem openitem = new JMenuItem("Open...");
        openitem.addActionListener(new OpenFileListener(this, model));
        filemenu.add(openitem);
        
        menubar.add(filemenu);
        
        return menubar;
    }
    
    public void updateImagePanel(int width, int height) {
        imagePanel.setPreferredSize(width, height);
        imagePanel.repaint();
        frame.pack();
    }
    
    public JFrame getFrame() {
        return frame;
    }
    
    public class ImagePanel extends JPanel {

        private static final long serialVersionUID = 1L;
        
        private ImageDisplayModel model;
        
        public ImagePanel(ImageDisplayModel model) {
            this.model = model;
            this.setPreferredSize(649, 480);
        }
        
        public void setPreferredSize(int width, int height) {
            this.setPreferredSize(new Dimension(width, height));
        }
        
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            
            BufferedImage image = model.getImage();
            if (image != null) {
                g.drawImage(image, 0, 0, this);
            }
        }
        
    }
    
    public class OpenFileListener implements ActionListener {
        
        private ImageDisplay frame;
        
        private ImageDisplayModel model;

        public OpenFileListener(ImageDisplay frame, ImageDisplayModel model) {
            this.frame = frame;
            this.model = model;
        }

        @Override
        public void actionPerformed(ActionEvent event) {
            JFileChooser chooser = new JFileChooser();
            FileNameExtensionFilter filter = new FileNameExtensionFilter(
                    "JPG & PNG Images", "jpg", "png");
            chooser.addChoosableFileFilter(filter);
            chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
            
            File file = model.getFile();
            if (file != null) {
                chooser.setCurrentDirectory(file);            
            }
            
            int result = chooser.showOpenDialog(frame.getFrame());
            if (result == JFileChooser.APPROVE_OPTION) {
                File selectedFile = chooser.getSelectedFile();
                model.setFile(selectedFile);
                BufferedImage image;
                try {
                    image = ImageIO.read(selectedFile);
                    model.setImage(image);
                    frame.updateImagePanel(image.getWidth(), 
                            image.getHeight());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        
    }
    
    public class ImageDisplayModel {
        
        private BufferedImage image;
        
        private File file;

        public BufferedImage getImage() {
            return image;
        }

        public void setImage(BufferedImage image) {
            this.image = image;
        }

        public File getFile() {
            return file;
        }

        public void setFile(File file) {
            this.file = file;
        }
        
    }

}