我想创建一个文本字段,该字段在输入更多文本时会水平扩展。
将prefColumnCount属性绑定到TextField中文本的长度后,其大小会随着文本的变长而增加。但是,无论文本长度如何,插入记号的位置都不会更新,并且会卡在同一位置。用户必须手动将插入号移动到前面,才能正确显示它。
图片:
输入一些文本后的样子,该文本不会占据整个文本字段:

在文本开头移动插入符号后:

这是我当前的代码:
TextField textField = new TextField();
textField.prefColumnCountProperty().bind(textField.textProperty().length());
setHgrow(textField, Priority.ALWAYS);
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?任何帮助表示赞赏!
有MainController:
public class MainController {
@FXML private RadioButton radioButton;
@FXML private RadioButton radioButton2;
@FXML public void addContact() {
boolean b = radioButton.isSelected();
boolean b2 = radioButton.isSelected();
}
}
Run Code Online (Sandbox Code Playgroud)
并且main.fxml:
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="350.0" prefWidth="755.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ru.habrahabr.ui.MainController">
<TableView fx:id="table" editable="true" prefHeight="200.0" prefWidth="405.0" tableMenuButtonVisible="true" AnchorPane.bottomAnchor="50.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
<HBox alignment="CENTER" layoutX="21.0" layoutY="207.0" prefHeight="50.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="10.0" AnchorPane.rightAnchor="10.0">
<RadioButton fx:id="radioButton" text="Male">
<HBox.margin>
<Insets right="3.0"/>
</HBox.margin>
</RadioButton>
<RadioButton fx:id="radioButton2" text="Female">
<HBox.margin> …Run Code Online (Sandbox Code Playgroud) 我是编程新手,开始申请学校。为此,我使用 C# WPF,为了获得美观的应用程序,我安装了 Material Design。
首先,我开始了 Material Design 的演示,在这里你可以看到你可以使用哪些东西等等,以及可以复制的东西。因此,快速查看后,我发现了一个漂亮的文本框,带有边框,其顶部有一个复选框。要复制的代码是这样的
<StackPanel>
<CheckBox x:Name="MaterialDesignOutlinedTextFieldTextBoxEnabledComboBox"
Margin="32,0,0,8" IsChecked="True">
Enabled
</CheckBox>
<TextBox Height="100" VerticalAlignment="Top" Margin="32,0,0,0"
TextWrapping="Wrap" AcceptsReturn="True"
VerticalScrollBarVisibility="Auto"
Style="{StaticResource MaterialDesignOutlinedTextFieldTextBox}"
materialDesign:HintAssist.Hint="This is a text area"
IsEnabled="{Binding Path=IsChecked, ElementName=MaterialDesignOutlinedTextFieldTextBoxEnabledComboBox}" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
因为我只需要文本框,所以我删除了复选框的代码并在应用程序中实现了其余部分。所以现在的代码是这样的:
<TextBox Height="100" Margin="32,0,0,0" VerticalAlignment="Top"
TextWrapping="Wrap" AcceptsReturn="True"
VerticalScrollBarVisibility="Auto"
Style="{StaticResource MaterialDesignOutlinedTextFieldTextBox}"
materialDesign:HintAssist.Hint="This is a text area" />
Run Code Online (Sandbox Code Playgroud)
现在的问题是,我无法编辑文本框。我猜 TextBox 链接到了 CheckBox,因为我删除了它,所以我无法再在其中写入。这一切都可以与标准文本框配合使用,但使用复制的代码我无法执行任何操作,只需查看带有圆形边框的文本框即可。
那么任何人都可以帮助我,如何在我可以编辑它的同时实现带有此边框的文本框等等?我现在不知道有什么解决方案,所以如果有人可以帮助我,我将不胜感激。
感谢您的帮助。
在这里,我想创建一个自定义对话框,其工作方式类似于Alert,具有漂亮的 UI;“showDialog.fxml”是一个DialogPane.
我尝试过JFXDialog,但它没有等待,也没有给我用户的选择。有什么办法可以得到好的result吗?提前致谢。
这是我的Alert实现:
primaryStage.setOnCloseRequest(event -> {\n Alert alert = new Alert(Alert.AlertType.CONFIRMATION);\n alert.setTitle("\xd0\x92\xd1\x8b\xd1\x85\xd0\xbe\xd0\xb4");\n alert.setHeaderText("Are you really want to exit ?");\n ButtonType yes = new ButtonType("Yes");\n ButtonType no = new ButtonType("No");\n alert.getButtonTypes().clear();\n alert.getButtonTypes().addAll(yes, no);\n\n Optional<ButtonType> option = alert.showAndWait();\n if (option.get() == yes) {\n System.exit(0);\n } else {\n alert.close();\n event.consume();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n这是新的。
\n primaryStage.setOnCloseRequest(event -> {\n FXMLLoader loader = new FXMLLoader(getClass().getResource("/views/common/showDialog.fxml"));\n ShowDialogController controller = loader.getController();\n Dialog<JFXButton> dialog = …Run Code Online (Sandbox Code Playgroud) 我使用一个Text节点来计算字符串的尺寸,如所描述这里,归纳为:
new Text("some text").getLayoutBounds();
Run Code Online (Sandbox Code Playgroud)
返回的维度在不同的执行点并不总是相同的,对于相同的输入 string,并且其他所有内容都相同(字体等)。似乎不一致在某种程度上与退格键与 a 的交互有关TextArea,即使此 TextArea 与 Text 节点无关。
这是一个间歇性/非确定性问题,但其他人能够使用以下代码重现它:
public class Test extends Application {
private Text text = new Text();
public static void main(String... args) {
launch(args);
}
public void start(Stage stage) {
TextArea textArea = new TextArea();
textArea.textProperty().addListener((observable, oldValue, newValue) -> {
text.setText(newValue);
System.out.println(String.format("height=%.1f", text.getLayoutBounds().getHeight()));
});
stage.setScene(new Scene(new Group(textArea)));
stage.show();
}
}
Run Code Online (Sandbox Code Playgroud)
输入几个“X”字符,我得到(在 Windows 上):height=16.0. 键入退格后(但当字符串中仍有几个“X”字符时),我得到height=17.0. 如果我输入更多字符,高度保持17.0,然后任意移回 16.0,然后是 17.0 …
我想用来MediaView播放 Shinobi 媒体服务器生成的视频流和视频文件,但MediaView似乎无法处理 Shinobi 生成的任何流或文件。
我正在使用 Java 18 和 JavaFX 19(我也尝试过旧版本)。
我这里有一个由 Shinobi 生成的示例文件。
在VLC中运行良好,这表明该文件具有以下属性:
编解码器: H264 - MPEG-4 AVC(第 10 部分)(avc1)
视频分辨率: 1280x720
解码格式: Planar 4:2:2 YUV 全尺寸
色度位置:左侧
我已向MediaPlayer、MediaView和Media对象添加了错误处理程序,但当我尝试播放该文件时没有错误。
有人知道为什么玩家不喜欢上面的文件吗?
有人成功播放 Shinobi 的文件吗(它在幕后使用 FFMPEG。)?
它确实播放其他文件,例如:
https://coderslegacy.com/wp-content/uploads/2020/07/Pygame_Platformer-1.mp4";
Run Code Online (Sandbox Code Playgroud)
我希望视频能够正常播放,或者让播放器告诉我为什么无法播放视频。
这是我的代码:
package com.example.videotester;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaErrorEvent;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.Stage;
import java.io.File;
public class HelloApplication extends …Run Code Online (Sandbox Code Playgroud) 我有一堂课:
public class User extends Body {
private Integer userId;
private String userName;
private String emailId;
//getters and setters
}
Run Code Online (Sandbox Code Playgroud)
我想Body用 Jackson 映射器排除类属性,因为我收到错误。
ObjectMapper mapper = new ObjectMapper();
User user = new User;
String jsonString = mapper.writeValueAsString(user);
Run Code Online (Sandbox Code Playgroud)
如何在排除所有扩展或实现类的情况下将对象转换为 JSON?我只需要转换User类而没有Body
我的超类有很多这样的公共方法:
public final Enumeration method(String email) {
throw new RuntimeException("Error");
}
public final Object method(String name) {
throw new RuntimeException("Error");
}
Run Code Online (Sandbox Code Playgroud) 我无法禁用我的按钮。在下面的代码中,acceptis aButton和emailis a TextField。
email.setOnAction(ae -> {
if(!email.getText().isEmpty()) {
accept.setDisable(false);
} else
accept.setDisable(true);
});
Run Code Online (Sandbox Code Playgroud)
如果我在文本字段中写,它不会做任何事情。
我在 XAML Toolkit C# 中使用 Material Design,在 Material Design WPF C# 中使用 MessageBox,


我需要这样或更好的 MessageBox 设计
我试过使用 DialogHost 但发生此错误
没有加载的 DialogHost 实例。
private async void MenuPopupButton_OnClick(object sender, RoutedEventArgs e) {
var sampleMessageDialog = new SampleMessageDialog {
Message = {Text = "Goodbye"}
};
await DialogHost.Show(sampleMessageDialog, "RootDialog");
}
Run Code Online (Sandbox Code Playgroud)
没有加载的 DialogHost 实例。
我想以与 C# XAML 文件中相同的方式定义按钮的填充。而不是写这样的东西:
<Button fx:id="btn1" ...>
<padding>
<Insets top="0" right="5" bottom="10" left="5" />
</padding>
</Button>
<Button fx:id="btn2" ...>
<padding>
<Insets topRightBottomLeft="5" />
</padding>
</Button>
Run Code Online (Sandbox Code Playgroud)
,这样写会更容易:
<Button fx:id="btn1" ... padding="0 5 10 5" />
<Button fx:id="btn2" ... padding="5" />
Run Code Online (Sandbox Code Playgroud)
我不知道为什么“填充”属性有这个限制。我在FXML 文档中看到,可以通过为给定类型实现valueOf()方法来完成类型强制:
public static Insets valueOf(String info) {
// Data retrieval
}
Run Code Online (Sandbox Code Playgroud)
但我不知道把它放在哪里,因为Insets类被锁定(JDK)。因为这是一个静态方法,我认为该方法可以在其他地方实现,但是启动应用程序总是给我一个强制错误:
Caused by: java.lang.IllegalArgumentException: Unable to coerce 0 5 10 5 to class javafx.geometry.Insets.
Run Code Online (Sandbox Code Playgroud)
目前,我找到的唯一解决方案是: