2016-02-10 2 views
1

Я создал эту программу, когда при нажатии кнопки «создать» создаются две другие кнопки ButtonBar (называемые newNode) .. внутри этой панели кнопок есть кнопка и круг. Когда все будет создано, я бы хотел изменить цвет этих двух кругов, когда я нажимаю на другую кнопку. Я кое-что закодировал, но я могу просто изменить цвет круга LAST.JavaFX 8: изменение цвета определенного круга с его собственным идентификатором

public class Controller implements Initializable{ 

@FXML 
private Button btnHaveFun; 
@FXML 
private ButtonBar ReadSMSBar; 
@FXML 
private ButtonBar GalleryBar; 
@FXML 
private ButtonBar FileExplorerBar; 
@FXML 
private ButtonBar SpyCamBar; 
@FXML 
private ButtonBar TakeAPictureBar; 
@FXML 
private ButtonBar TakeAScreenshotBar; 
@FXML 
private ButtonBar RecordAVideoBar; 
@FXML 
private ButtonBar SpyWhatsappBar; 
@FXML 
private ButtonBar KeyLoggerBar; 
@FXML 
private ButtonBar ScreenStreamBar; 
@FXML 
private ButtonBar SpyMicrophoneBar; 
@FXML 
private ButtonBar slaveBar; 
@FXML 
private VBox slaveVbox; 
@FXML 
private Circle statusSlave; 

private ButtonBar newNode = new ButtonBar(); 
private Circle c= new Circle(); 

@Override 
public void initialize(URL location, ResourceBundle resources) { 
    // TODO Auto-generated method stub 

}  
public void creat(String s){ 
    newNode = new ButtonBar(); 
    c= new Circle(); 
    c.setRadius(11); 
    c.setStrokeWidth(1); 
    c.setStroke(Paint.valueOf("#ffffff")); 
    c.setFill(Paint.valueOf("#15ff00")); 
    c.setId(s); 
    newNode.getButtons().addAll(new Button("Mavero"),c); 
    slaveVbox.getChildren().addAll(newNode) ; 
} 

@FXML 
public void newComp(){  
    creat("id1"); 
    creat("id2"); 
} 

@FXML 
public void change(){ 
c.setFill(Color.BLACK); 
} 
} 
+0

Вы хотите изменить цвет всех кругов одновременно одного цвета? Или изменить конкретный круг на определенный цвет? –

+0

Я хотел бы изменить цвет определенного ... (в этом случае создан первый круг ... тот, который имеет «id1» как ID. –

ответ

2

Вы можете использовать Node.lookup() получить Circle с с помощью селектора CSS (или Node.lookupAll для нескольких узлов) :

void change(String oldId, String newId) { 
    change(oldId, Color.RED); 
    change(newId, Color.GREEN); 
} 

void change(String id, Color color){ 
    Circle circle = (Circle) slaveVbox.lookup('#'+id); 
    circle.setFill(color); 
} 
+0

Работал Префектно .. Большое спасибо –

0

Его простой:

Просто добавьте все круги в списке ->

List<Circle> circles = new ArrayList<>(); 

public void creat(String s) { 
    newNode = new ButtonBar(); 
    Circle c = new Circle(); 
    c.setRadius(11); 
    c.setStrokeWidth(1); 
    c.setStroke(Paint.valueOf("#ffffff")); 
    c.setFill(Paint.valueOf("#15ff00")); 
    c.setId(s); 
    circles.add(c); 
    newNode.getButtons().addAll(new Button("Mavero"), c); 
    slaveVbox.getChildren().addAll(newNode); 
} 

@FXML 
public void newComp() { 
    creat("id1"); 
    creat("id2"); 
} 

@FXML 
public void change() { 
    for (Circle c : circles) { 
     c.setFill(Color.BLACK); 
    } 
} 
+0

Это изменит цвет всех кругов .. но я хотел бы изменить цвет первого созданного круга (тот, который имеет идентификатор «id1» в качестве идентификатора). Я мог бы установить статут if в вашем цикле for, но есть ли что-то более прямое, чем это? –

+0

А также список не может использоваться как вы сделали .. это дает ошибку. –

+0

Вы можете использовать, так как Фабиан ответил на функцию поиска, но метод list/loop работает быстрее. Какая ошибка дает это? – Marcel