- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个我无法解决的问题。我想在组合框中实现进度条:
public class JavaFXApplication4 extends Application
{
@Override
public void start(Stage primaryStage)
{
double y1 = 15;
ProgressBar p1 = new ProgressBar();
p1.setLayoutY(y1);
HBox vb1 = new HBox(10);
vb1.getChildren().addAll(new Label("Progressbar 1"), p1);
double y2 = 15;
ProgressBar p2 = new ProgressBar();
p2.setLayoutY(y2);
HBox vb2 = new HBox(10);
vb2.getChildren().addAll(new Label("Progressbar 2"), p2);
double y3 = 15;
ProgressBar p3 = new ProgressBar();
p3.setLayoutY(y3);
HBox vb3 = new HBox(10);
vb3.getChildren().addAll(new Label("Progressbar 3"), p3);
TextChooser textChooser = new TextChooser(
vb1, vb2, vb3
);
textChooser.setStyle("-fx-font: 10px \"Verdana\";");
StackPane root = new StackPane();
root.getChildren().add(textChooser);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static class TextChooser extends StackPane
{
private Label label = new Label();
private ComboBox<HBox> combo = new ComboBox<>();
public TextChooser(HBox... options)
{
StackPane.setAlignment(label, Pos.CENTER_LEFT);
StackPane.setAlignment(combo, Pos.CENTER_LEFT);
label.graphicProperty().bind(
//combo.getSelectionModel().selectedItemProperty()
combo.getSelectionModel().selectedItemProperty()
);
label.visibleProperty().bind(
combo.visibleProperty().not()
);
//label.setPadding(new Insets(0, 0, 0, 10));
combo.getItems().setAll(options);
combo.setCellFactory(new Callback<ListView<HBox>, ListCell<HBox>>()
{
@Override
public ListCell<HBox> call(ListView<HBox> p)
{
return new ListCell<HBox>()
{
@Override
protected void updateItem(HBox item, boolean empty)
{
super.updateItem(item, empty);
if (item == null || empty)
{
setGraphic(null);
}
else
{
setGraphic(item);
}
}
};
}
});
combo.getSelectionModel().select(0);
combo.setVisible(true);
label.setOnMouseEntered(event -> combo.setVisible(true));
combo.showingProperty().addListener(observable ->
{
if (!combo.isShowing())
{
combo.setVisible(false);
}
});
combo.setOnMouseExited(event ->
{
if (!combo.isShowing())
{
combo.setVisible(false);
}
});
getChildren().setAll(label, combo);
}
public static void main(String[] args)
{
launch(args);
}
}
}
你能告诉我如何使用 setButtonCell
才能在组合框中显示 Progressbar 吗?
最佳答案
You should not be placing Nodes into the items list - rather the data should be stored there and then rendered with your cell factory.
例如:
public class JavaFXApplication5 extends Application
{
public static void main( String[] args )
{
launch( args );
}
public class ProgressData
{
private final DoubleProperty progressProp = new SimpleDoubleProperty();
private final StringProperty progressName = new SimpleStringProperty();
public ProgressData( String name, double progress )
{
progressProp.set( progress );
progressName.set( name );
}
public DoubleProperty progressProperty()
{
return progressProp;
}
public StringProperty nameProperty()
{
return progressName;
}
@Override
// Lazy hack for the combo button.
public String toString()
{
return progressName.get();
}
}
@Override
public void start( Stage primaryStage )
{
ProgressData vb1 = new ProgressData( "Progressbar 1", -1 );
ProgressData vb2 = new ProgressData( "Progressbar 2", 0.2 );
ProgressData vb3 = new ProgressData( "Progressbar 3", 0.3 );
TextChooser textChooser = new TextChooser( vb1, vb2, vb3 );
textChooser.setStyle( "-fx-font: 10px \"Verdana\";" );
StackPane root = new StackPane();
root.getChildren().add( textChooser );
Scene scene = new Scene( root, 300, 250 );
primaryStage.setTitle( "Hello World!" );
primaryStage.setScene( scene );
primaryStage.show();
}
public static class TextChooser extends StackPane
{
private final Label label = new Label();
private final ComboBox<ProgressData> combo = new ComboBox<>();
public TextChooser(ProgressData... options)
{
StackPane.setAlignment( label, Pos.CENTER_LEFT );
StackPane.setAlignment( combo, Pos.CENTER_LEFT );
final ProgressBar labelBar = new ProgressBar();
label.visibleProperty().bind( combo.visibleProperty().not() );
label.setContentDisplay( ContentDisplay.RIGHT );
label.setGraphic( labelBar );
combo.getItems().setAll( options );
// This will change the label's text and the progress bar value.
combo.getSelectionModel().selectedItemProperty().addListener( new ChangeListener<ProgressData>()
{
@Override
public void changed( ObservableValue<? extends ProgressData> observable, ProgressData oldValue, ProgressData newValue )
{
if ( labelBar.progressProperty().isBound() )
{
labelBar.progressProperty().unbind();
}
labelBar.progressProperty().bind( newValue.progressProperty() );
label.setText( newValue.nameProperty().get() );
}
} );
combo.setCellFactory( new Callback<ListView<ProgressData>, ListCell<ProgressData>>()
{
@Override
public ListCell<ProgressData> call( ListView<ProgressData> p )
{
return new ListCell<ProgressData>()
{
private final ProgressBar cellBar = new ProgressBar();
{
cellBar.setMouseTransparent( true );
setContentDisplay( ContentDisplay.RIGHT );
setGraphic( cellBar );
}
@Override
protected void updateItem( ProgressData item, boolean empty )
{
super.updateItem( item, empty );
if ( item != null && ! empty )
{
if ( cellBar.progressProperty().isBound() )
{
cellBar.progressProperty().unbind();
}
cellBar.progressProperty().bind( item.progressProperty() );
setText( item.nameProperty().get() );
}
}
};
}
} );
combo.getSelectionModel().select( 0 );
combo.setVisible( true );
label.setOnMouseEntered( new EventHandler<MouseEvent>()
{
@Override
public void handle( MouseEvent event )
{
combo.setVisible( true );
}
} );
combo.showingProperty().addListener( new InvalidationListener()
{
@Override
public void invalidated( Observable observable )
{
if ( !combo.isShowing() )
{
combo.setVisible( false );
}
}
} );
combo.setOnMouseExited( new EventHandler<MouseEvent>()
{
@Override
public void handle( MouseEvent event )
{
if ( !combo.isShowing() )
{
combo.setVisible( false );
}
}
} );
getChildren().setAll( label, combo );
}
}
}
关于javafx - ComboBox 的 setButtonCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20604974/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a min
我有一个包含一些数据的网格(用户列表)。对于每一行,我有许多操作,例如更新、删除、激活、暂停、查看您命名的订单。 而不是放置如此多的按钮,这些按钮将填充超过 400-500像素 我想放置一个组合框,其
在我的一个对话框中,我有以下控制: 我在其他地方填充 ComboBox,如下所示: 但是,如果我没有创建 ComboBox 位,MSI 仍将构
我在项目中为 MVC 使用了 kendo complete。 我有某些形式的国家/地区列表,我显示国家/地区名称,但存储国家/地区代码。 我有以下问题:当用户输入不在列表中的内容时,该值将发送到服务器
我有一个组合框,其中的值是从托管 bean 填充的,如下所示: keywordlist.setConnDB("jdbc:sqlserver://xx.xx.x.xx:1433;DatabaseName
我有一个 ComboBox,它绑定(bind)到 ViewModel 中的复杂类型集合,这些类型的长度可以是任意数量,具体取决于用户的偏好。 我已经创建了一个基于 ComboBox 默认值的样式,并且
我做了一个转换器: public class BooleanToDateConverter implements Converter { private static final long s
编辑:由于 Rob 的回答,我已经更新了下面的代码,现在它可以工作了。 我找到了几页显示如何执行此操作的页面( http://www.cmcrossroads.com/content/view/131
我是 PyQT 的新手。 我有兴趣向 tableView 的每一行添加一个组合框。在 PyQT 4 中可能吗? 我知道,在 QT5 中是可能的,但不确定 PyQT。 预先感谢您的帮助。 最佳答案 如果
我对 JavaFX(8)、HBox、ComboBox 和 HGrow 有问题。 HGrow 不能与 ComboBox 结合使用。 (信息:使用 TextField (而不是 ComboBox),它按预
我有一个 XAML UserControl连接到 ImportPresenter View 模型。有四个ComboBox我的 XAML 中的项目: CashActivityTypeBAI CashAc
我将两个组合框绑定(bind)到同一个 listviewcollection。问题是在一个组合框中选择一个值会导致另一个组合框选定项更改为第一个组合框的确切值。它们是耦合的,我希望它们彼此独立。 My
我正在尝试在 extjs 3.4 中的组合框中的选项之间添加一行。我可以添加该行,但不能用我的远程位置的数据填充它。 (如果我删除修改的 tpl 选项,它就会填充)。 这是我的代码。我只需要在“组”字
我被 WIX 安装程序中的组合框和自定义操作困住了。 我有一个包含几个值的组合框(下拉菜单)。当用户从此下拉列表中选择一个值时,我想在屏幕上显示一些文本(对于下拉列表中的每个项目都是唯一的)。 在 .
我有 ComboBox cbx 和一个包含选项卡的 TabPane(选项卡:t)和一个按钮 b1。因此,单击此按钮 b1 时,它会在 TabPane 中添加一个新选项卡 t,并在包含以下内容的 Com
我有两个组合框:水果和饮料。 fruits 具有字符串:“apple”、“orange”、“banana” drinks 具有字符串:“water”、“coffee”、“juice” 如何制作一个新组
我必须监听什么事件,以便在用户从(可编辑的)WPF ComboBox control 中选择一个选项时得到通知? 我是否必须先访问 Items 属性才能收听 Items.CurrentChanged?
我有以下简单的 QML 组合框: import QtQuick 2.0 import QtQuick.Controls 1.4 import si.mikroelektronika 1.0 Item
当我创建组合框时,列表中没有项目。现在,当我单击下拉按钮时,会调用一个函数(通过 postcommand 选项),但是一旦在我的函数中,我不知道如何在组合框的列表框中设置值。 代码如下: #u
我有两个组合框 我使用 LINQ-to-Entities 来填充 cmbGroup 组合框 Dim db as myDataEntity cmbGroup.ItemsSource = db.Mak
我是一名优秀的程序员,十分优秀!