Загрузка файла в 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);
}
}
}