2010-09-09 3 views
3

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

Оригинал 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]); 
      } 

Старинного Скала

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) 
     } 
+0

Что, кажется, проблема с представленным переводом? Чем больше вы помогаете нам помогать, тем более вероятно, что вам нужна хорошая помощь. –

ответ

4

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

button(x) listenTo button(x) 

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

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

buttons.zipWithIndex foreach { case (button, x) => 
    //no need to use buttons(x) 
} 
0

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

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

x match { 
    case xx if xx > 6 => ... 
    case _ => ... 
}