Загрузка файла в Swing с помощью JAVA Fie Chooser

Я ищу способ открыть файл в Java с помощью средства выбора файлов, который я выяснил, и впоследствии использовать текстовый файл, который я открыл в графике Swing/AWT, который я не могу найти подходящим способом. У меня есть код, чтобы просто открыть файл.

public void actionPerformed(ActionEvent e) {
                    JFileChooser chooser = new JFileChooser();
                    chooser.setCurrentDirectory(new File(System.getProperty("user.home")));
                    int result = chooser.showOpenDialog(menuItem2);
                    if (result == JFileChooser.APPROVE_OPTION) {
                        // user selects a file
                    }
                    File selectedFile = chooser.getSelectedFile();
                }

Где я перехожу к файлу "sample.txt", который содержит данные x,y для графика, который я хочу показать. Я разработал извлечение данных в компонент краски, и это не проблема. Я просто хочу загрузить текстовый файл из меню выбора и показать данные из этого графика.

Другие файлы.

public class Main {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame f = new JFrame("Perigon");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.add(new MainPanel());
            f.pack();
            f.setLocationRelativeTo(null);
            Menu m = new Menu();
            f.setJMenuBar(m.createMenuBar());
            //f.setExtendedState(JFrame.MAXIMIZED_BOTH);
            f.setVisible(true);
        });
    }
}

class MainPanel extends JPanel {
    private static final String[] BUTTON_TEXTS = {"Load Sample","B","C","D"};
    private DrawPanel drawPanel = new DrawPanel();

    public MainPanel() {
        JPanel buttonPanel = new JPanel(new GridLayout(0, 1, 5, 5));
        for (String btnText : BUTTON_TEXTS) {
            buttonPanel.add(new JButton(btnText));
        }

        JPanel rightPanel = new JPanel(new BorderLayout());
        rightPanel.add(buttonPanel, BorderLayout.PAGE_START);
        rightPanel.setBorder(BorderFactory.createEmptyBorder(100, 100, 0, 100));

        setLayout(new BorderLayout());
        add(drawPanel, BorderLayout.CENTER);
        add(buttonPanel, BorderLayout.WEST);
    }
}

class DrawPanel extends JPanel {
    private static final int PANEL_W = 1500;
    private static final int PANEL_H = 900;
    private static final double xScale = 1.5;

    private static final int yScale = 1000;
    private static final int xOffset = 0;
    private static final int yOffset = 6000;

    ScatterData data = new ScatterData();

    public DrawPanel() {
        setBorder(BorderFactory.createLineBorder(Color.BLUE));
    }

    @Override
    public Dimension getPreferredSize() {
        if (isPreferredSizeSet()) {
            return super.getPreferredSize();            
        } else {
            return new Dimension(PANEL_W, PANEL_H);
        }
    }

    // draw in a JPanel's paintComponent method
    @Override
    protected void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        g2.setColor(Color.white);
        g2.fillRect(0,0, this.getWidth(), this.getHeight());

        data.showCurves();

        g2.setColor(Color.black);


        for(int i=1;i<=10;i++) {
            int lineHeight = (int) ((i+6)*yScale-yOffset)/10;
            g2.drawLine(0, lineHeight, this.getWidth(), lineHeight);
        }

        for(int i=1;i<=10;i++) {
            int lineWidth = (int) (i*100*xScale-xOffset);
            g2.drawLine(lineWidth, this.getHeight(), lineWidth, 0);
        }

        double x; 
        double y;

        for(String cur : data.getCurves()) {
            String[] parts = cur.split(",");
            x = Double.parseDouble(parts[0]);
            y = Double.parseDouble(parts[1]);

            g2.setPaint(Color.red);
            g2.fillRect((int) (x*xScale+xOffset),(int) (this.getHeight()-(y*yScale)+yOffset),10,10);
        }

    }
}

а также

public class ScatterData {
ArrayList<String> curves = new ArrayList<String>();

public ScatterData() {
    parseData();
}

public void parseData() {
    try
    {
        BufferedReader in = new BufferedReader(new FileReader(new File("sample.txt")));

        String line;
        boolean cursor = false;
        while ((line = in.readLine()) != null) {
            if(line.contains("~A")) {
                cursor = true;
            }else {
                if(cursor) {
                    //System.out.println(line);
                    curves.add(line);
                }
            }
        }   

    } catch (IOException e)
    {
        System.out.println("File I/O error!");
    }
}

public ArrayList<String> getCurves() {
    return curves;
}

public void showCurves() {
    for (String cur : curves) {
        System.out.println(cur);
    }
}

}

0 ответов

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