2017-07-20 104 views
1

我認爲這個bug早就應該修復了...但是當我將一個ComboBox放置在靠近窗口底部的位置時,它會向下擴展並離開屏幕。我認爲這樣做的原因是因爲上面有其他控件,所以不是「碰撞」到它而是向下擴展。爲什麼組合框不能擴展而不是其餘的佈局? 我所知道的是,當我在它上面添加一些填充時,它將向上而不是向下擴展。 JavaFX - Combobox向下擴展屏幕(Post 8u60)

例子:

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception{ 
     ObservableList<String> choiceList = FXCollections.observableArrayList(); 
     choiceList.addAll("Choice1", "Choice2", "Choice3", "Choice4"); 
     ComboBox<String> choices = new ComboBox<>(choiceList); 
     choices.setMinWidth(100); 

     Button button1 = new Button("First Button"); 
     button1.setMinWidth(150); 
     Button button2 = new Button("Second Button"); 
     button2.setMinWidth(150); 

     VBox layout = new VBox(10); 
     layout.setPadding(new Insets(10, 10, 10, 10)); 
     layout.getChildren().addAll(button1, button2, choices); 

     Scene scene = new Scene(layout); 

     primaryStage.setScene(scene); 
     primaryStage.setTitle("Example"); 
     primaryStage.show(); 
    } 


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

Image of window displayed by the above code

任何人有此修復程序?

+0

這是奇怪的,因爲列表應_above_舞臺彈出。你可以發佈[MCVE]嗎? – Itai

回答

0

請注意,如果您的情況下,您將主應用程序窗口移動到屏幕底部,並且組合框仍在下降並被切斷,因此彈出窗口的某些內容不可見,則可能會以及一個錯誤。但我的猜測是,如果這是什麼問題,這是一個系統特定的問題,因爲我無法在OS X上覆制這樣的問題。如果是這種情況,請嘗試Java 9早期訪問版本並查看問題是否仍然存在複製,如果是這樣,你可以提交bug report


這不是bug,它是通過設計。

ComboBox彈出窗口內部實現爲PopupControl。 PopupControl是一個新窗口,它不受限於位於其父窗口(您的主要階段)範圍內。 JavaFX具有邏輯確保彈出窗口(如ContextMenus和ComboBox彈出窗口)顯示在可見屏幕區域內,而不是自己的舞臺區域。

如果您將主應用程序移動到屏幕頂部,然後打開組合框彈出窗口,則彈出窗口會下降,因爲屏幕上有空間可以顯示它。但是,如果將主應用程序移動到屏幕底部,那麼打開組合框彈出窗口,彈出窗口會掉下來(我不知道解釋該概念的更好方法;-),因爲沒有空間可顯示彈出如果它下降。

放下樣品。通過在OS X上運行您的示例代碼創建,移動屏幕底部附近的主應用程序窗口並打開組合框彈出窗口。

enter image description here