javax_slr: (Default)
[personal profile] javax_slr
Ярон увлекается аниме.
Иногда можно скачать субтитры только на русском, на иврите - нет.
Он скачивает, но иногда они в кодировке 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()
}

January 2026

S M T W T F S
    123
45 678910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 15th, 2026 04:55 am
Powered by Dreamwidth Studios