2013-12-25 3 views
0

У меня есть этот базовый пример JavaFX комбобокса:Увеличить размер шрифта выпадающего

public class JavaFXComboBox extends Application { 

    @Override 
    public void start(Stage primaryStage) { 

     final ComboBox comboBox = new ComboBox(); 
     comboBox.getItems().addAll(
       "Item 1", 
       "Item 2", 
       "Item 3", 
       "Item 4"); 
     comboBox.setValue("Item 1"); 

     final Label label = new Label(); 

     Button btn = new Button(); 
     btn.setText("Read comboBox"); 
     btn.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) { 
       label.setText("selectd: " + comboBox.getValue()); 
      } 
     }); 

     VBox vBox = new VBox(); 
     vBox.setPadding(new Insets(5, 5, 5, 5)); 
     vBox.setSpacing(5); 
     vBox.getChildren().addAll(label, comboBox, btn); 

     StackPane root = new StackPane(); 
     root.getChildren().add(vBox); 

     Scene scene = new Scene(root, 300, 250); 

     primaryStage.setTitle("Hello World!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

Может ли вы сказать мне, как я могу увеличить размер текста проницательности COMBOX но сохраняя оригинальный размер выпадающей этикетки?

enter image description here

ответ

3

Создайте файл combo.css как-

.combo-box-popup .list-view { 
    -fx-font-size : 15pt; 
} 

/*added this in an edit*/ 
.combo-box-popup .list-view .list-cell { 
    -fx-padding: -1 -1 -1 -1; 
} 

и добавьте строку scene.getStylesheets().add("javafxcombobox/combo.css"); после того, как сцена создана.

enter image description here

Некоторые надрезы от caspian.css даст вам то, чтобы попробовать. Играйте с дополнением и посмотрите, что произойдет.

.combo-box-popup .list-view { 
-fx-background-color: -fx-box-border, -fx-control-inner-background; 
-fx-background-insets: 0, 1; 
-fx-effect: dropshadow(three-pass-box , rgba(0,0,0,0.6) , 8, 0.0 , 0 , 0); 
} 

.combo-box-popup .list-view .list-cell { 
-fx-padding: 4 0 4 5; 
-fx-background-color: -fx-control-inner-background; 
} 

Я хотел бы знать, если есть способ, чтобы добавить вложенные стили в comboBox.setStyle(), если кто знает.

+0

Да, это увеличивает размер списка, но это также увеличивает ширину поля со списком. Как я могу это предотвратить? –

+1

@brian setStyle (...) применяет стиль только к тому узлу, на котором вы его называете. Вы можете получить ссылку на узлы ниже определенного узла в графе сцены, вызвав lookup (...) на узле, а затем вызовите setStyle (...) на этом: 'comboBox.lookup (". Combo-box- popup .list-view "). setStyle (" - fx-font-size: 15pt; ");'. Однако использование внешнего файла css намного лучше. –

+0

@James_D Я получаю NPE, используя этот код, но, похоже, документация подсказывает, что все в порядке. Может быть, это только для объявленных стилей с использованием #selector – brian

0

Привет питер использовать этот код вашего падения вниз увеличения размера, но размер выбора коробки узла одна проблемы не increase.I будет работать ту часть, если плз проверить этот код

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.geometry.Insets; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.ComboBox; 
import javafx.scene.control.Label; 
import javafx.scene.control.ListCell; 
import javafx.scene.control.ListView; 
import javafx.scene.layout.StackPane; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 
import javafx.util.Callback; 

/** 
* 
* @author reegan 
*/ 
public class JavaFXComboBoxStack extends Application { 

    @Override 
    public void start(Stage primaryStage) { 

     final ComboBox comboBox = new ComboBox(); 
     comboBox.getItems().addAll(
       "Item 1", 
       "Item 2", 
       "Item 3", 
       "Item 4"); 
     comboBox.setValue("Item 1"); 

     comboBox.setMaxWidth(10); 


     comboBox.setMaxSize(25, 25); 

     comboBox.setCellFactory(
       new Callback<ListView<String>, ListCell<String>>() { 
      @Override 
      public ListCell<String> call(ListView<String> param) { 
       final ListCell<String> cell = new ListCell<String>() { 
        { 
         super.setPrefWidth(10); // Set Drop Down Width 
        } 

        @Override 
        public void updateItem(String item, 
          boolean empty) { 
         super.updateItem(item, empty); 
         if (item != null) { 
          setText(item); 

         } else { 
          setText(null); 
         } 
        } 
       }; 
       return cell; 
      } 
     }); 
     final Label label = new Label(); 

     Button btn = new Button(); 
     btn.setText("Read comboBox"); 
     btn.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) { 
       label.setText("selectd: " + comboBox.getValue()); 
      } 
     }); 

     VBox vBox = new VBox(); 
     vBox.setPadding(new Insets(5, 5, 5, 5)); 
     vBox.setSpacing(5); 
     vBox.getChildren().addAll(label, comboBox, btn); 

     StackPane root = new StackPane(); 
     root.getChildren().add(vBox); 

     Scene scene = new Scene(root, 300, 250); 
     primaryStage.setTitle("Hello World!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

Ссылка на этот пример: http: //www.java2s.com/Code/Java/JavaFX/UsingCellFactorytochangethewidthofaComboBoxandtextcolor.htm –

3

Вам просто нужно установить setCellFactory на ваш comboBox как показано ниже после его инициализации, как показано ниже -

comboBox.setValue("Item 1"); 

     comboBox.setCellFactory(
       new Callback<ListView<String>, ListCell<String>>() { 
        @Override 
        public ListCell<String> call(ListView<String> param) { 
         final ListCell<String> cell = new ListCell<String>() { 
          @Override 
          public void updateItem(String item, 
            boolean empty) { 
           super.updateItem(item, empty); 
           if (item != null) { 
            setText(item); 
            setFont(this.getFont().font(this.getFont().getName(), 30.0)); //set your desired size 
           } else { 
            setText(null); 
           } 
          } 
         }; 
         return cell; 
        } 

       }); 

     final Label label = new Label(); 

Это поможет вам. Спасибо!

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