2014-01-23 5 views
2

У меня есть выбор цвета, назначающий цвета кнопке с помощью команды setStyle. Затем мне нужно проанализировать значение цвета, потому что оно находится в шестнадцатеричном формате. Я назначаю этот цвет вручную объекту. У меня есть две проблемы, о которых я могу думать. Иногда мой анализ неправильный, и он не будет назначать цвет. Вторая проблема заключается в том, что я устанавливаю стиль с фиксированной строкой. Я хочу добавить позже встроенный стиль с помощью набора цветов. Мой первый способ мышления состоял в том, чтобы назначить каждый жестко закодированный встроенный css в виде строки и конкатрировать их в конце одного большого вызова SetStyle. Мне было интересно, есть ли лучший вариант, например, изменение внешнего css?Простой способ присвоить instyle CSS

private void displayproperties() 
{ 
    AnchorPane PropertiesPane = Main.getGeneralPaneProperties(); 
    PropertiesPane.getChildren().clear(); 
    //backgroundColor 
    Text bgcolor = new Text(); 
    bgcolor.setText("Background Color"); 
    bgcolor.setLayoutX(0.0); 
    bgcolor.setLayoutY(10.0); 
    PropertiesPane.getChildren().add(bgcolor); 
    System.out.println(getStyle()); 
    final ColorPicker colorPicker = new ColorPicker(); 
    colorPicker.setOnAction(new EventHandler<ActionEvent>() 
      { 

       @Override 
       public void handle(ActionEvent event) { 
        setStyle("-fx-background-color:"+ colorPicker.getValue().toString().substring(2)); 

       } 

      }); 
    PropertiesPane.getChildren().add(colorPicker); 
    String bordercolor = "-fx-border-color: #545454"; 
    colorPicker.relocate(bgcolor.getBoundsInParent().getMaxX()+5,bgcolor.getBoundsInParent().getMinY()); 
} 

ответ

4

Чтобы исправить синтаксический анализ: Не используйте toString(): нет никакой гарантии, формат возвращаемого String будет то же самое в будущих версиях. Это означает, что ваш код может быть поврежден, если ваш пользователь обновит вашу установку JVM.

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

public String getCssSpec(Color c) { 
    int r = (int) (c.getRed() * 256) ; 
    int g = (int) (c.getGreen() * 256) ; 
    int b = (int) (c.getBlue() * 256) ; 
    return String.format("rgb(%d, %d, %d)", r, g, b); 
} 

В качестве альтернативы:

return String.format("#%02x%02x%02x", r, g, b); 

Тогда вобще

@Override 
public void handle(ActionEvent event) { 
    setStyle("-fx-background-color: " + getCssSpec(colorPicker.getValue())); 
} 

Для задачи необходимости применить несколько стилей, лучший способ это возможно объедините все стили в строку и вызовите setStyle (...). Я думаю, что так, как я хотел бы сделать это, чтобы определить класс со свойствами для каждого из стилей, которые вы хотите установить:

class ButtonStyle { 
    Color backgroundColor ; 
    Color borderColor ; 
    // etc 
} 

, а затем определить метод, чтобы построить всю CSS строку из различных свойств. Таким образом вы можете обновить свойство и восстановить встроенный стиль с помощью вызова метода или двух.

Смежные вопросы