Java 组合框的标签未格式化
我想创建一个显示为组合框的组列表:Java 组合框的标签未格式化,java,javafx,javafx-2,javafx-8,Java,Javafx,Javafx 2,Javafx 8,我想创建一个显示为组合框的组列表: import java.util.List; import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.Scene; import javafx.scene.control.ComboBox; import javafx.scene.
import java.util.List;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.Callback;
public class Listobject extends Application
{
public static void main(String[] args)
{
launch(args);
}
@Override
public void start(Stage stage)
{
// Insert Some data
ListGroupsObj ob = ListGroupsObj.newInstance().groupId(12).groupName("Test");
ListGroupsObj osb = ListGroupsObj.newInstance().groupId(13).groupName("Test2");
final ComboBox<ListGroupsObj> listGroups = new ComboBox();
listGroups.setButtonCell(new GroupListCell());
listGroups.setCellFactory(new Callback<ListView<ListGroupsObj>, ListCell<ListGroupsObj>>()
{
@Override
public ListCell<ListGroupsObj> call(ListView<ListGroupsObj> p)
{
return new GroupListCell();
}
});
listGroups.setEditable(true);
listGroups.getItems().addAll(ob, osb);
listGroups.setValue(ob);
// Display the selected Group
listGroups.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<ListGroupsObj>()
{
@Override
public void changed(ObservableValue<? extends ListGroupsObj> arg0, ListGroupsObj arg1, ListGroupsObj arg2)
{
if (arg2 != null)
{
System.out.println("Selected Group: " + arg1.getGroupId() + " - " + arg2.getGroupName());
}
}
});
final StackPane layout = new StackPane();
layout.getChildren().add(listGroups);
layout.setStyle("-fx-background-color: cornsilk; -fx-padding: 15;");
stage.setScene(new Scene(layout));
stage.show();
}
class GroupListCell extends ListCell<ListGroupsObj>
{
@Override
protected void updateItem(ListGroupsObj item, boolean empty)
{
super.updateItem(item, empty);
if (item != null)
{
setText(item.getGroupId() + " - " + item.getGroupName());
}
}
}
private List<ListGroupsObj> listGroups;
public static class ListGroupsObj
{
private int groupId;
private String groupName;
public static ListGroupsObj newInstance()
{
return new ListGroupsObj();
}
public ListGroupsObj()
{
}
public ListGroupsObj groupId(int groupId)
{
this.groupId = groupId;
return this;
}
public ListGroupsObj groupName(String groupName)
{
this.groupName = groupName;
return this;
}
public int getGroupId()
{
return groupId;
}
public String getGroupName()
{
return groupName;
}
// @Override
// public String toString()
// {
// return serverName;
// }
}
}
import java.util.List;
导入javafx.application.application;
导入javafx.beans.value.ChangeListener;
导入javafx.beans.value.observeValue;
导入javafx.scene.scene;
导入javafx.scene.control.ComboBox;
导入javafx.scene.control.ListCell;
导入javafx.scene.control.ListView;
导入javafx.scene.layout.StackPane;
导入javafx.stage.stage;
导入javafx.util.Callback;
公共类Listobject扩展应用程序
{
公共静态void main(字符串[]args)
{
发射(args);
}
@凌驾
公众假期开始(阶段)
{
//插入一些数据
ListGroupsObj ob=ListGroupsObj.newInstance().groupId(12).groupName(“测试”);
ListGroupsObj osb=ListGroupsObj.newInstance().groupId(13).groupName(“Test2”);
最终组合框列表组=新组合框();
setButtonCell(新的GroupListCell());
setCellFactory(新回调()
{
@凌驾
公共ListCell调用(ListView p)
{
返回新的GroupListCell();
}
});
listGroups.setEditable(true);
listGroups.getItems().addAll(ob、osb);
设置值(ob);
//显示所选组
listGroups.getSelectionModel().SelectEditeProperty().addListener(新的ChangeListener())
{
@凌驾
public void已更改(ObservalEvalue向组合框提供一个值,以便从字符串转换为ListGroupsObj类型,然后再转换回来。还有其他更简单的解决方案吗?没有。我甚至不确定我能想象出比提供一个对象来进行转换更简单的解决方案