Combobox 组合框崩溃javafx 8 JDK 51
所以我一直在使用ComboBox的程序已经停止工作了。在我将jdk从8u20更新到8u50之前,现在当运行同一个程序而不对其进行任何更改时,如果选择ComboBox而不首先对其进行Tab,则会导致程序冻结,然后崩溃 在搜索之后,我只在web上的另一个地方看到过这种情况,防止崩溃的唯一方法是按tab键,直到选择组合框,然后使用箭头键进行选择 还有人听说过吗 下面是一个示例,如果复制粘贴这两个类并运行main,则可以轻松运行该示例 主要类别:Combobox 组合框崩溃javafx 8 JDK 51,combobox,javafx-8,Combobox,Javafx 8,所以我一直在使用ComboBox的程序已经停止工作了。在我将jdk从8u20更新到8u50之前,现在当运行同一个程序而不对其进行任何更改时,如果选择ComboBox而不首先对其进行Tab,则会导致程序冻结,然后崩溃 在搜索之后,我只在web上的另一个地方看到过这种情况,防止崩溃的唯一方法是按tab键,直到选择组合框,然后使用箭头键进行选择 还有人听说过吗 下面是一个示例,如果复制粘贴这两个类并运行main,则可以轻松运行该示例 主要类别: import javafx.application.Ap
import javafx.application.Application;
import javafx.stage.Stage;
import java.util.ArrayList;
/**
* Created by Josh on 19/8/2015.
*/
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
ArrayList<String> options = new ArrayList<String>();
options.add("Apple");
options.add("Orange");
options.add("Pear");
String result = Selection_Dialog.show(options, "Orange");
}
public static void main(String[] args) {
launch(args);
}
}
导入javafx.application.application;
导入javafx.stage.stage;
导入java.util.ArrayList;
/**
*由Josh于2015年8月19日创建。
*/
公共类主扩展应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
ArrayList选项=新建ArrayList();
选项。添加(“苹果”);
选项。添加(“橙色”);
选项。添加(“Pear”);
字符串结果=Selection_Dialog.show(选项,“橙色”);
}
公共静态void main(字符串[]args){
发射(args);
}
}
组合框类:
import com.sun.glass.ui.Screen;
import javafx.event.*;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.BorderPane;
import javafx.scene.text.TextAlignment;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import java.awt.*;
import java.util.ArrayList;
class Selection_Dialog {
//Window Properties
private static final String TITLE = "Selection Dialog";
private static String DEFAULT_MESSAGE = "";
private static int DEFAULT_WIDTH = 400;
private static int DEFAULT_HEIGHT = 250;
private static Point DEFAULT_POSITION = new Point();
//Window Components
private static Stage stage;
private static javafx.scene.control.Label messageLabel;
private static javafx.scene.control.Button okButton;
private static ComboBox selector;
//Show Window Popup
public static String show(ArrayList<String> options, String initial) {
return show(options, initial, DEFAULT_MESSAGE, DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_POSITION);
}
public static String show(ArrayList<String> options, String initial, String message) {
return show(options, initial, message, DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_POSITION);
}
public static String show(ArrayList<String> options, String initial, String message, Point position) {
return show(options, initial, message, DEFAULT_WIDTH, DEFAULT_HEIGHT, position);
}
public static String show(ArrayList<String> options, String initial, String message, int width, int height) {
return show(options, initial, message, width, height, DEFAULT_POSITION);
}
public static String show(ArrayList<String> options, String initial, String message, int width, int height, Point position) {
//Setup Properties
stage = new Stage();
BorderPane root = new BorderPane();
stage.initStyle(StageStyle.UTILITY);
stage.initModality(Modality.APPLICATION_MODAL);
stage.setScene(new Scene(root, width, height));
stage.setTitle(TITLE);
stage.setResizable(false);
stage.setOnCloseRequest(new EventHandler() {
@Override
public void handle(javafx.event.Event event) {
event.consume();
}
});
if(position == DEFAULT_POSITION){
int x, y;
x = Screen.getMainScreen().getWidth()/2;
y = Screen.getMainScreen().getHeight()/2;
x = x - width/2;
y = y - height/2;
position = new Point(x, y);
}
stage.setX(position.getX());
stage.setY(position.getY());
//Create Components
messageLabel = new javafx.scene.control.Label(message);
okButton = new javafx.scene.control.Button("Ok");
selector = new ComboBox();
selector.getItems().addAll(options);
if(options.size() > 0){
if(initial == null){
selector.getSelectionModel().select(0);
}else if(options.contains(initial)){
selector.getSelectionModel().select(initial);
}else{
selector.getSelectionModel().select(0);
}
}
//Align Components
root.setAlignment(messageLabel, Pos.CENTER);
root.setAlignment(okButton, Pos.CENTER);
messageLabel.setTranslateY(15);
okButton.setTranslateY(-25);
messageLabel.setTextAlignment(TextAlignment.CENTER);
messageLabel.setWrapText(true);
//Add Components
root.setBottom(okButton);
root.setTop(messageLabel);
root.setCenter(selector);
//Add Listeners
okButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
stage.close();
}
});
//Show Window
stage.showAndWait();
return selector.getSelectionModel().getSelectedItem().toString();
}
}
导入com.sun.glass.ui.Screen;
导入javafx.event.*;
导入javafx.geometry.Pos;
导入javafx.scene.scene;
导入javafx.scene.control.*;
导入javafx.scene.layout.BorderPane;
导入javafx.scene.text.TextAlignment;
导入javafx.stage.model;
导入javafx.stage.stage;
导入javafx.stage.StageStyle;
导入java.awt.*;
导入java.util.ArrayList;
类选择对话框{
//窗口属性
私有静态最终字符串TITLE=“选择对话框”;
私有静态字符串DEFAULT_MESSAGE=“”;
私有静态int默认_宽度=400;
专用静态int默认值_高度=250;
私有静态点默认位置=新点();
//窗口组件
私有静态阶段;
私有静态javafx.scene.control.Label messageLabel;
私有静态javafx.scene.control.Button okButton;
专用静态组合框选择器;
//显示窗口弹出窗口
公共静态字符串显示(ArrayList选项,字符串首字母){
返回显示(选项、初始、默认消息、默认宽度、默认高度、默认位置);
}
公共静态字符串显示(ArrayList选项、字符串首字母、字符串消息){
返回显示(选项、首字母、消息、默认宽度、默认高度、默认位置);
}
公共静态字符串显示(ArrayList选项、字符串首字母、字符串消息、点位置){
返回显示(选项、首字母、消息、默认宽度、默认高度、位置);
}
公共静态字符串显示(ArrayList选项、字符串首字母、字符串消息、整型宽度、整型高度){
返回显示(选项、首字母、消息、宽度、高度、默认位置);
}
公共静态字符串显示(ArrayList选项、字符串首字母、字符串消息、整数宽度、整数高度、点位置){
//设置属性
阶段=新阶段();
BorderPane根=新的BorderPane();
stage.initStyle(StageStyle.UTILITY);
阶段.初始模态(模态.应用\模态);
舞台场景(新场景(根、宽、高);
舞台。片名(片名);
阶段。可设置大小(假);
stage.setOnCloseRequest(新的EventHandler(){
@凌驾
公共无效句柄(javafx.event.event){
event.consume();
}
});
如果(位置==默认位置){
int x,y;
x=Screen.getMainScreen().getWidth()/2;
y=Screen.getMainScreen().getHeight()/2;
x=x-宽度/2;
y=y-高度/2;
位置=新点(x,y);
}
stage.setX(position.getX());
stage.setY(position.getY());
//创建组件
messageLabel=newjavafx.scene.control.Label(消息);
okButton=newjavafx.scene.control.Button(“确定”);
选择器=新组合框();
selector.getItems().addAll(选项);
如果(options.size()>0){
if(initial==null){
selector.getSelectionModel().select(0);
}else if(options.contains(首字母)){
selector.getSelectionModel().select(初始);
}否则{
selector.getSelectionModel().select(0);
}
}
//对齐组件
root.setAlignment(messageLabel,Pos.CENTER);
根设置对齐(OK按钮,位置中心);
messageLabel.setTranslateY(15);
okButton.setTranslateY(-25);
messageLabel.setTextAlignment(TextAlignment.CENTER);
messageLabel.setWrapText(true);
//添加组件
root.setBottom(确定按钮);
setTop(messageLabel);
root.setCenter(选择器);
//添加侦听器
setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
stage.close();
}
});
//橱窗
stage.show和wait();
返回选择器.getSelectionModel().getSelectedItem().toString();
}
}
我创建了ComboBox类,以便在将来的项目中可以方便地从用户那里获得选择对话框。它以前工作得很好,可能是出了什么问题?从未见过这样的行为(在8u60的ea版本中,没有u50,或者是有?)请显示一个SSCCE,演示问题,以便我可以尝试重现itI添加了我用于创建combobox和example Main的类,该类仅在combobox中放置3个选项,并将结果存储在字符串中。很抱歉,我的意思是更新51NEW DISCOVERY:我替换了“combobox”的每个实例,并将其替换为“ChoiceBox”现在它工作得完美无缺。这真的很奇怪。与组合框相比,选择框显得有些蹩脚:(嗯……无法复制(使用8u60b18)-可能太旧了(比u51早一个cou)