javax_slr (javax_slr) wrote,

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) {
    return stringBuilder.toString();

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

Tags: programming

  • Post a new comment


    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.