有没有办法在 JavaFX 2 中存储模型对象的标识符或模型对象本身TreeItem<String>?只是Value为了存储文本...
我正在TreeView从模型对象列表中填充 a ,并且需要在用户单击节点时找到它。我已经习惯了工作,Value并Text在.NET Windows窗体或HTML和我恐怕无法适应思维的JavaFX这样...
也许,我只是瞎了,但我有一个滑块,我需要知道是否有任何方法可以改变步伐。
示例:滑块从 7.5 到 13.0 Pace 0.5
当我在标签中设置值时,我想要这样的东西:7.5; 8.0; 8.5
对于滑块的每一个动作,此时我都会得到这样的结果:7.5;7.51
尝试了一切。任何的想法?

我的 Windows 主窗格位于其AnchorPane顶部,其TabPane菜单TabPane是您在图片上看到的选项卡。看到灰色的“背景”,这是一部分TabPane,当我扩展我的窗口,以更大的尺寸,TabPane不与它扩大,它保持相同的大小,所以额外的空间是空的,我会把它想与规模窗户,当然是宽度。
我用一堆字符串创建了一个 ListView,它具有多选模式,最后我向 selectedItemProperty() 添加了一个监听器,如下所示:
ObservableList<String> myStringsObsList = FXCollections.observableArrayList(strings);
ListView<String> listView = new ListView<String>(myStringsObsList);
listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
listView.getSelectionModel().selectedItemProperty().addListener(
new ChangeListener<String>() {
public void changed(ObservableValue<? extends String> ov, String old_val, String new_val)
{
System.out.println("Selection Changed!");
}
}
});
Run Code Online (Sandbox Code Playgroud)
选择项目时,一切都打印正常,但是一旦我开始使用 Ctrl 取消选择项目。此处没有打印任何内容,因为可能不会触发已更改的事件。
有谁知道这是否是一个错误?或者我在这里做错了什么?
最后,我只需要知道选择是否以某种方式发生了变化(无论是选择还是取消选择项目),这样我就可以启动另一个进程。
编辑 --- 使用 Ctrl 取消选择时,“选择已更改!” 仅当取消选择所选项目的最后一个项目时才打印。
所以我有一个正常工作的表,并从ObservableList这里的代码中获取数据:
public void setMainTableData(ObservableList<FileMP3> list)
{
artistCol.setCellValueFactory(new PropertyValueFactory<FileMP3, String>("artist"));
albumCol.setCellValueFactory(new PropertyValueFactory<FileMP3, String>("album"));
titleCol.setCellValueFactory(new PropertyValueFactory<FileMP3, String>("title"));
trackCol.setCellValueFactory(new PropertyValueFactory<FileMP3, String>("track"));
yearCol.setCellValueFactory(new PropertyValueFactory<FileMP3, String>("year"));
mainTable.setItems(list);
}
Run Code Online (Sandbox Code Playgroud)
然而,这些列并不都包含字符串数据 - 我需要能够插入一个int,可能还有其他类型,如Duration. 的track和year条目存储为整数,且有一个(未示出)入口称为length。这FileMP3作为 a存储在我的对象中Duration,在将其插入表中之前,我没有看到任何明显的方法来操作存储在那里的数据。我希望能够使用Duration.getMillis()然后对其进行一些数学运算以将其转换为可显示的int格式,但我想将其存储在FileMP3as 中Duration。
我在该主题上阅读的所有教程都使用构造函数:
new PropertyValueFactory<FileMP3, String>("genre")
总而言之,我希望能够String在表格中插入除 a 以外的内容。
在我的radiobuttons下面我有一些像底部填充,而我不使用任何填充CSS语句

.radio-button {
-fx-font-family: "Arial";
-fx-font-size: 11;
/* -fx-text-fill: rgb(255, 255, 255, 0.4);*/
-fx-text-fill: lightgoldenrodyellow;
/* -fx-effect: dropshadow(one-pass-box , rgba(0, 0, 0, 0.6), 0, 0.0 , 0 , 1 );*/
-fx-border-width: 0px;
Run Code Online (Sandbox Code Playgroud)
}
如何删除?radiobuttons似乎没有很好地居中.
编辑:
这是显示父母对于radiobuttons的层次结构

这是视觉外观

这里是完整的CSS类
/*
Created on : 20-gen-2014, 18.18.13
Author : Alberto Pedroni <acepsut@gmail.com>
*/
.pane {
/*-fx-background-color: linear-gradient( #f0f8ff, #b0c4de);*/
//-fx-background-color: linear-gradient( cornsilk, tan);
/*-fx-background-radius: 5,4,3,5;
-fx-background-insets: 4,4,4,4;*/
}
.tab {
/* -fx-background-color: red; */
/* -fx-border-color: gray;
-fx-border-radius: 4;
-fx-border-width: 1;*/
/* -fx-background-color: …Run Code Online (Sandbox Code Playgroud) 我想要实现的是从main方法获取控制器实例,所以我可以从另一个类调用控制器的方法并更新fxml.不管怎样,这是我的代码:
主要课程:
public class Main extends Application {
Controller controller;
@Override
public void start(Stage primaryStage) throws Exception{
FXMLLoader fxmlLoader = new FXMLLoader();
Parent root = fxmlLoader.load(getClass().getResource("sample.fxml"));
controller = fxmlLoader.getController();
primaryStage.setTitle("uPick Smart Service");
primaryStage.setScene(new Scene(root, 1600, 600));
primaryStage.show();
ConnectionHandling connectionHandling = new ConnectionHandling();
Thread X = new Thread (connectionHandling);
X.start();
}
public static void main(String args[]){
launch(args);
}
public Controller getController(){
return controller;
}
}
Run Code Online (Sandbox Code Playgroud)
我的控制器类:
public class Controller {
public HBox billbox;
public int childnr;
public void createBill() {
System.out.println("Creating"); …Run Code Online (Sandbox Code Playgroud) 我正在尝试显示我创建的上下文菜单,当我右键单击窗格或图像视图时((在请求的上下文菜单上)).问题是它们似乎没有setContextMenue方法,不像标签和按钮......等.如何将上下文菜单关联到似乎不接受上下文菜单的节点?
@FXML
Button button1, button2;
@FXML
Pane mainPane;
@FXML
ImageView image;
private void initContextMenu() {
final ContextMenu contextMenu = new ContextMenu();
final MenuItem item1 = new MenuItem("open a file");
final MenuItem item2 = new MenuItem("quit");
contextMenu.getItems().addAll(item1, item2);
// not possible
image.setContextMenu(contextMenu);
// possible
button1.setContextMenu(contextMenu)
Run Code Online (Sandbox Code Playgroud) 说我有一个控制器
@FXML private ObservableList<String> myStrings = FXCollections.observableArrayList();
Run Code Online (Sandbox Code Playgroud)
是否可以编写任何FXML,它将ListView myStrings与其项目连接起来?
我的第一次尝试是:
<ListView>
<items fx:id="myStrings"/>
</ListView>
Run Code Online (Sandbox Code Playgroud)
但是这种抱怨fx:id在那个位置上是无效的.我也试过了
<ListView items="${controller.myStrings}"/>
Run Code Online (Sandbox Code Playgroud)
......但它无法解决这个问题.
<ListView fx:id="myStringsListView"/>
// In controller
@FXML private ListView<String> myStringsListView;
@FXML public void initialize() {
myStringsListView.setItems(myStrings);
}
Run Code Online (Sandbox Code Playgroud)
这就是我现在正在做的事情,但是间接和样板的数量在这里伤害了我.
我正在尝试使用滑块缩放ImageView中的选定图像。我唯一能做的就是调整其中包含图像的整个ImageView的大小。但这不是我要寻找的。我只想使用具有相同大小的ImageView缩放图像。它应该是焦距的演示。我也在使用场景构建器。我只是所有这些的初学者,因此,非常感谢您的帮助。这就是我所拥有的。
public void openImage(ActionEvent event) {
FileChooser fc = new FileChooser();
File f = fc.showOpenDialog(null);
if (f != null) {
System.out.println(f.toURI().toString());
Obrazok = new Image(f.toURI().toString());
imageView.setImage(Obrazok);
imageView.setSmooth(true);
imageView.setCache(true);
}
}
public void setOnZoom (MouseEvent e){
imageView.scaleXProperty().bind(slider.valueProperty());
imageView.scaleYProperty().bind(slider.valueProperty());
Rectangle2D viewpoint = new Rectangle2D(0, 0, Obrazok.getRequestedHeight(), Obrazok.getRequestedWidth());
imageView.setViewport(viewpoint);
imageView.setViewport(viewpoint);
imageView.setImage(Obrazok);
}
Run Code Online (Sandbox Code Playgroud)