Код сам извлекает файлы из папки, а затем позволяет мне переименовывать их. , часть, с которой я борюсь, заключается в том, что также предполагается проверять каждый файл, чтобы увидеть, соответствует ли он определенной структуре именования, и если да, то предполагается добавить ее в текстовые поля.
У меня есть фильтры Int и Size для JTextFields, которые, по-видимому, работают правильно, т. е. они не принимают никакие буквы и не превышают максимальную длину. У меня есть два таких фильтра X и Y в разных текстовых полях. X работает отлично, когда я беру строку и использую функцию setText — имейте в виду, что текст всегда равен максимальному размеру фильтра. Y, однако не обновляет текст. У меня есть тесты, чтобы убедиться, что размер не превышает максимальную длину.
Соответствующий код выглядит следующим образом, если кому-то нужно больше, дайте мне знать.
Код: Выделить всё
//...CODE...
DocumentFilter sciFilter = new SizeAndIntFilter(5);
DocumentFilter serialFilter = new SizeAndIntFilter(4);
//...CODE...
sciField = new JTextField(5);
((AbstractDocument)sciField.getDocument()).setDocumentFilter(sciFilter);
sciField.setBounds(110, 55, 45, 25);
sciType = new JLabel();
sciType.setBounds(110, 140, 450, 50);
sciType.setVerticalAlignment(SwingConstants.TOP);
sciField.addKeyListener(new KeyListener(){
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_SHIFT){
//DO NOTHING
}
else if(sciField.getText().length() == 5){
serialField.requestFocus();
}
}
@Override
public void keyPressed(KeyEvent e) {}
});
serialField = new JTextField(4);
((AbstractDocument)serialField.getDocument()).setDocumentFilter(serialFilter);
serialField.setBounds(175, 55, 41, 25);
serialField.addKeyListener(new KeyListener(){
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_SHIFT){
//DO NOTHING
}
else if(serialField.getText().length() == 4) {
pageField.requestFocus();
}
}
@Override
public void keyPressed(KeyEvent e) {}
});
//...CODE...
//This part of the code seems to work fine with the Filter
if(listOfFiles.length == 0){
oldFileName = new JLabel("No Files In This Folder");
}
else{
oldFileName = new JLabel(listOfFiles[0].getName());
String testThis = listOfFiles[0].getName();
//SPLIT oldFileName BY DELIMITER "-" TO SEE IF IT IS FOLLOWING THE CURRENT NAMING STANDARD
String[] testThisArray = testThis.split("-");
String r;
//IF THE SPLIT HAS BETWEEN 5 AND 7 STRINGS SET TEXTFIELDS
if(testThisArray.length >= 5 && testThisArray.length = 2 && testThisArray[4].length() = 6){
if(testThisArray[5].length() == 1){
sizeField.setText(testThisArray[5]);
}
}
if(testThisArray.length == 7){
r = testThisArray[6].length() < 2 ? testThisArray[6] : testThisArray[6].substring(0, 2);
revField.setText(r);
}
}
}
//...CODE...
accept = new JButton("Accept");
accept.addActionListener(new ActionListener(){
int n = 0;
@Override
public void actionPerformed(ActionEvent e){
String newAsset = assetField.getText();
String newSCI = sciField.getText();
String newSerial = serialField.getText();
String newPage = pageField.getText();
String newType = typeField.getText();
String newSize = sizeField.getText();
String newRev = revField.getText();
String together = newAsset + "-" + newSCI + "-" + newSerial + "-" + newPage + "-" + newType + "-" + newSize + "-" + newRev + ".pdf"; // "-" + newSize + "-" + newRev + ".pdf";
String[] checkNum = {"", ""};
//CHECK - ALL VALUES USED ARE VALID
if(newAsset.length() != 4 || newSCI.length() != 5 || newSerial.length() != 4 || newPage.length() != 3 || (newType.length() < 2 && newType.length() > 5) || newSize.length() != 1 || newRev.length() != 2){
JOptionPane.showMessageDialog(frame, "ALL TEXTBOXES ARE REQUIRED AND MUST BE FILLED PROPERLY",
"ERROR", JOptionPane.ERROR_MESSAGE);
}
//IF THEY ARE GOOD RENAME THE FILE
else{
while(n < listOfFiles.length){
try{
Integer.parseInt(pageField.getText());
}
catch(NumberFormatException nfe){
JOptionPane.showMessageDialog(frame, "Ensure PAGE is numeric", "ERROR", JOptionPane.ERROR_MESSAGE);
break;
}
//RENAME FILE [N]
File newName = new File(f + "/" + together);
while(!listOfFiles[n].renameTo(newName)){
int choice = JOptionPane.showConfirmDialog(null, oldFileName.getText() + " cannot be renamed while it is OPEN" + "\n" +
"1. Close the file and continue by pressing 'YES'" + "\n" +
"2. Press NO to skip to the next file", "FILE IS OPEN - ERROR", JOptionPane.YES_NO_OPTION);
if(choice == JOptionPane.NO_OPTION){
break;
}
}
listOfFiles[n].renameTo(newName);
n++;
if(n < listOfFiles.length){ oldFileName.setText(listOfFiles[n].getName());
checkNum = listOfFiles[n].getName().split("-");
}
else{
oldFileName.setText("NO MORE FILES");
accept.setEnabled(false);
}
break;
}
//CHECK BOXES
//IF OLD FILE NAME MATCHES CURRENT NAMING CONVENTION - PLACE IT IN THE TEXT BOXES
if(checkNum.length >= 5 && checkNum.length
Подробнее здесь: [url]https://stackoverflow.com/questions/78329910/java-documentfilter-issue[/url]
Мобильная версия