#java #swing #jframe #jfilechooser
#java #swing #jframe #jfilechooser
Вопрос:
Привет, я новичок в swing, и мне нужна некоторая помощь. Я создал проект обработки файлов, в котором я читаю входной файл и некоторые другие существующие файлы в проекте, выполняю множество проверок и синтаксического анализа и создаю csv и xlsx-файл. До сих пор я использовал для этих входных данных
JTextField csvpath = new JTextField();
JTextField csvfile = new JTextField();
JTextField xmlpath = new JTextField();
JTextField xmlfile = new JTextField();
JTextField excpath = new JTextField();
JTextField excfile = new JTextField();
Object[] message = {
"Enter the path of the CSV file to be created:", csvpath,
"Enter the CSV file name:", csvfile,
"Now enter the XML path to be read:", xmlpath,
"Also enter the XML file name:", xmlfile,
"Please enter the Excel file path to be created:", excpath,
"Finally enter the Excel file name:", excfile
};
int option = JOptionPane.showConfirmDialog(null, message, "Convert XML File to CSV File", JOptionPane.OK_CANCEL_OPTION);
if (option == JOptionPane.OK_OPTION) {
String csvPath = csvpath.getText();
String csvFileName = csvfile.getText();
String xmlPath = xmlpath.getText();
String xmlFileName = xmlfile.getText();
String excPath = excpath.getText();
String excFileName = excfile.getText();
String FullcsvPath = csvPath "\" csvFileName ".csv";
String FullxmlPath = xmlPath "\" xmlFileName ".xml";
String excelPath = excPath "\" excFileName ".xlsx";
.
.
parsing/creating starts...
Поскольку в будущем этот проект будут использовать другие, я хотел создать средство выбора файлов и получать пути к файлам / папкам в виде строк, чтобы считывать входные данные и создавать etc…
Я создал класс и общедоступные строки для путей, и когда я вызываю его, программа не останавливается, как раньше, продолжает выполняться, пока фрейм открыт, без получения нужных путей. Мой новый класс — это:
public static void SelectFiles() throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
final JFrame window = new JFrame("Parse for manufacturers - Developed by Aris M");
JPanel topPanel = new JPanel();
JPanel midPanel = new JPanel();
JPanel botPanel = new JPanel();
final JButton openFolderChooser = new JButton("Select Folder to save csv - xlsx results");
final JButton openFileChooser = new JButton("Select the File to be parsed");
final JButton closeButton = new JButton("OK");
window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
final JFileChooser fc = new JFileChooser();
openFolderChooser.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fc.setCurrentDirectory(new java.io.File("user.home"));
fc.setDialogTitle("This is a JFileChooser");
fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
if (fc.showOpenDialog(openFolderChooser) == JFileChooser.APPROVE_OPTION) {
JOptionPane.showMessageDialog(null, fc.getSelectedFile().getAbsolutePath());
System.out.println(fc.getSelectedFile().getAbsolutePath());
csv = fc.getSelectedFile().getAbsolutePath();
xlsx = csv;
System.out.println(csv);
}
}
});
openFileChooser.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fc.setCurrentDirectory(new java.io.File("user.home"));
fc.setDialogTitle("This is a JFileChooser");
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
if (fc.showOpenDialog(openFileChooser) == JFileChooser.APPROVE_OPTION) {
JOptionPane.showMessageDialog(null, fc.getSelectedFile().getAbsolutePath());
System.out.println(fc.getSelectedFile().getAbsolutePath());
xml = fc.getSelectedFile().getAbsolutePath();
System.out.println(xml);
}
}
});
closeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
window.dispose();
}
});
window.add(BorderLayout.NORTH, topPanel);
window.add(BorderLayout.CENTER, midPanel);
window.add(BorderLayout.SOUTH, botPanel);
topPanel.add(openFolderChooser);
midPanel.add(openFileChooser);
botPanel.add(closeButton);
window.setSize(500, 150);
window.setVisible(true);
window.setLocationRelativeTo(null);
}
Комментарии:
1. Не могли бы вы объяснить, что вы подразумеваете под «программа не останавливается, как раньше»?
2. Как именно вы вызываете метод SelectFiles()? Я не понимаю смысла рендеринга JFrame таким образом
3. @devmind с помощью JOptionPane я могу поместить строки, нажать кнопку ok, и затем программа продолжится…
4. @SebVb выбираем_файлы_swing. SelectFiles(); внутри основного.
Ответ №1:
Код Swing выполняется в отдельном потоке, известном как поток отправки событий. Просто сделайте ваш основной поток занятым, пока виден фрейм. Добавьте следующий код в конец SelectFiles()
метода:
while (window.isVisible()) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}