2014-12-08 3 views
0

배열에 ImageView의 객체를 삽입 할 가능성이 있습니까? 또는 코드 줄 수를 줄이는 비슷한 방법이 있습니까?Javafx와 FXML - ImageView 객체의 배열을 삽입 할 가능성이

@FXML 
private ImageView led; 

@FXML 
private ImageView led1; 

...

@FXML 
private ImageView led64; 

@FXML 
private ImageViewArray led[64]; 

같은 것이 거기에 난 그냥 내가 가지고 라인의 양을 줄이고 자 :

그래서이 무슨 뜻인지입니다 쓰기 'coz 내가이 ImageView 개체의 많은 필요하고 그들을 모두 초기화해야합니다. 당신이 많은 제어, 그것은 아마도 더 나은 것이있을 경우

public class guiController implements Initializable { 
private static final Image ledOff = new Image("/images/led_white.gif"); 
private static final Image ledOn = new Image("/images/led_blue.gif"); 



@FXML 
private ImageView led; 

@FXML 
private ImageView led1; 

@FXML 
private ImageView led2; 
@FXML 
private ImageView led3; 

@FXML 
private ImageView led4; 

@FXML 
private ImageView led5; 

@FXML 
private ImageView led6; 

@FXML 
private ImageView led7; 




@FXML 
private void handleLedAction(MouseEvent ev){ 
    ImageView led = (ImageView) ev.getSource(); 
    if(led.getImage().equals(ledOff)){ 
     led.setImage(ledOn); 
    } else{ 
     led.setImage(ledOff); 
    } 
} 

@Override 
public void initialize(URL url, ResourceBundle rb) { 
    led.setImage(ledOff); 
    led1.setImage(ledOff); 
    led2.setImage(ledOff); 
    led3.setImage(ledOff); 
    led4.setImage(ledOff); 
    led5.setImage(ledOff); 
    led6.setImage(ledOff); 
    led7.setImage(ledOff); 
    }  

} 
+0

컨트롤러의'initialize()'메소드 (FXML 대신)에서 Java 코드로 UI의 해당 부분 만 설정하면됩니다. –

+0

정확히 어떻게하는지 모르겠습니다. 처음으로 작업해야합니다. 그래서 당신이 어떻게 설명 할 수 있다면 정말 감사 할 것입니다 –

답변

2

: 여기

전체 코드입니다 (아마도이 ​​일을 더 나은 방법이있다, 그래서 도움이 될 수있는 모든 마련하시기 바랍니다) FXML이 아닌 Java로 작성하십시오. FXML 파일에서이를 보관할 컨테이너를 만든 다음 컨트롤러의 initialize 메서드에서 ImageView을 추가하면됩니다. 이 떨어져 당신이 전환되는 항목이와 것 같습니다 이후

예를 들어, FXML에 당신은, 여담으로 컨트롤러

private static final Image ledOff = new Image("/images/led_white.gif"); 
private static final Image ledOn = new Image("/images/led_blue.gif"); 

@FXML 
private GridPane ledPanel ; 

private ImageView[] leds ; 

public void initialize() { 
    final int numLeds = 64 ; 
    final int numLedsPerRow = 8 ; 

    leds = new ImageView[numLeds]; 
    for (int i=0; i<numLeds; i++) { 
     ImageView led = new ImageView(ledOff); 
     leds[i] = led ; 
     ledPanel.add(leds[i], i % numLedsPerRow, i/numLedsPerRow); 
     led.setOnMousePressed(event -> { 
      if (led.getImage()==ledOff) { 
       led.setImage(ledOn); 
      } else { 
       led.setImage(ledOff); 
      } 
     }); 
    } 
} 

에서

<GridPane fx:id="ledPanel" /> 

다음을 (할 수 마우스 클릭으로 또는 CheckBoxImageViews 대신 사용하고 CSS를 사용하여 이미지를 보는 방식을 구성하면 모든 이벤트 처리 및 선택한 상태가 이미 코딩 된 상태가됩니다.)

+0

고맙습니다 ... 나는 이것을 시도 할 것입니다 :) –

+0

글쎄, 슬프게도 나는 다음과 같은 말을 듣습니다 : 람다 표현식에서 참조 된 지역 변수는 반드시 최종적이어야합니다 ...하지만 실제로는 없습니다 지역 변수와 내가 그것을 아래로 이동하고 그것을 최종으로 만들었더라도 나는 여전히 오류를 얻는다. –

+0

내 휴대 전화에서 편집을 시도했습니다. 나는 그것이 지금 일해야한다고 생각한다, 내가 컴퓨터에서 돌아 왔을 때 그것을 점검 할 것이다. –