javax_slr (javax_slr) wrote,
javax_slr
javax_slr

Groovy SwingBuilder

Ярон увлекается аниме.
Иногда можно скачать субтитры только на русском, на иврите - нет.
Он скачивает, но иногда они в кодировке windows-1251, и на его ивритском виндоузе не видны.

Он попросил написать программу "починки" этих субтитров, и ему нужно было чтобы это была программа с GUI (он не знаком с command line interface :( ) и с меню на иврите.

Я же воспользовался этим, чтобы посмотреть как на groovy делают GUI



import groovy.swing.SwingBuilder
import groovy.beans.Bindable
import javax.swing.filechooser.FileFilter
import javax.swing.JFileChooser
import javax.swing.JFrame

class MyModel {
    @Bindable String text = "\n"
}



def openSubDialog = new JFileChooser(
        dialogTitle: "תבחר קובץ srt",
        fileSelectionMode: JFileChooser.FILES_ONLY,
        multiSelectionEnabled: true,
        //the file filter must show also directories, in order to be able to look into them
        fileFilter: [getDescription: {-> "*.srt"}, accept: {file -> file==null?false:file ==~ /.*?\.srt/ || file.isDirectory() }] as FileFilter)



def model = new MyModel()

new SwingBuilder().edt {
    frame(title: "ממיר קידוד קבצים", size: [900, 100], defaultCloseOperation: JFrame.EXIT_ON_CLOSE, locationRelativeTo: null, show: true) {
        gridLayout(cols: 1, rows: 2)
        textArea(text: bind(source: model, sourceProperty: "text"))
        button("תבחר קובץ srt", actionPerformed: {  openSubDialog.showOpenDialog(); convert(openSubDialog.getSelectedFiles(), model) })
    }
}



def convert(def files,def model) {

    files.each {
        def a = readFile(it)
        if (a?.length() == null) {
            model.text += it.getAbsolutePath() + "empty !\n"
        } else {
            writeFile(it, a)
            model.text += it.getAbsolutePath() + "\n"
        }
    }
}

def readFile(File file) throws IOException {
    BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "windows-1251"));
    String line = null;
    StringBuilder stringBuilder = new StringBuilder();
    String ls = System.getProperty("line.separator");
    while ((line = reader.readLine()) != null) {
        stringBuilder.append(line);
        stringBuilder.append(ls);
    }
    reader.close();
    return stringBuilder.toString();
}

def writeFile(File file, String s) throws IOException {
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"), s.length());
    writer.write(s)
    writer.close()
}

Tags: programming
Subscribe

  • Грузия 2021. В поисках затерянного города.

    У нас после поездки в Кахетию была запланирована еще одна поездка с Кобой - без ночевки, на юго запад от Тбилиси. Лена и Лена решили, что устали от…

  • Грузия 2021. Кахетия, Вашлованский заповедник

    На ферме живут 5-6 достаточно крупных собак. Вечером видя нас они не проявляли никакого интереса. Утром, выйдя погулять Лена наткнулась на рычавших и…

  • Грузия 2021. Кахетия. Юг.

    Около двух часов едем в Дедоплискаро. По дороге - поля ярко алых маков. Очень красиво. Ближе к Кахетии начинаются виноградники - они намного ниже чем…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 2 comments