Scala Swing Date Picker - PullRequest
       1

Scala Swing Date Picker

3 голосов
/ 09 сентября 2010

Хотите конвертировать Java Swing DatePicker в Scala, но сталкиваетесь с трудностями в одной области кода.Как мне, вероятно, перевести часть if (x> 6) в scala?

Оригинальная Java, взятая из http://www.roseindia.net/tutorial/java/swing/datePicker.html

for (int x = 0; x < button.length; x++) {
                    final int selection = x;
                    button[x] = new JButton();
                    button[x].setFocusPainted(false);
                    button[x].setBackground(Color.white);
                    if (x > 6)
                            button[x].addActionListener(new ActionListener() {
                                    public void actionPerformed(ActionEvent ae) {
                                            day = button[selection].getActionCommand();
                                            d.dispose();
                                    }
                            });
                    if (x < 7) {
                            button[x].setText(header[x]);
                            button[x].setForeground(Color.red);
                    }
                    p1.add(button[x]);
            }

Преобразованная Scala

for (x <- 0 until buttons.length) {
            val selection = x
            buttons(x) = new Button {
                focusPainted = false
                background = Color.white
            }
            if (x > 6)
                buttons(x).reactions += {
                    case ButtonClicked(_) => {
                        day = buttons(selection).action
                        d.dispose()
                    }
                }   
            if (x < 7) {
                buttons(x).text = header(x)
                buttons(x).foreground = Color.red
            }
            contents += buttons(x)
        }

Ответы [ 2 ]

4 голосов
/ 09 сентября 2010

Что не так с вашим переводом?Это не работает?Единственное, что я могу увидеть с первого взгляда , это то, что вы не слушаете кнопку:

button(x) listenTo button(x)

Но я не уверен, насколько мудра кнопкапрослушивание само по себе есть, или есть ли какие-нибудь неприятные последствия.Вам не нужно , чтобы добавить реакции к самой кнопке, возможно, вы могли бы добавить их к самому средству выбора даты.

Кроме того, что-то вроде zipWithIndex может быть предпочтительнееВы сделали это:

buttons.zipWithIndex foreach { case (button, x) =>
    //no need to use buttons(x)
}
0 голосов
/ 09 сентября 2010

if(x < 7) может быть заменено на else, что будет более понятным.

Вы также можете использовать оператор сопоставления:

x match {
    case xx if xx > 6 => ...   
    case _ => ...   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...