在对标题感到沮丧之前,我想清楚一点,我对JavaFX UI更加新鲜.我使用Swing作为开发人员已经有9年了,目前我决定尝试使用JavaFX.网上的例子表明,与Swing相比,JavaFX真的可以创建漂亮的GUI.也许我试图以错误的方式创建和部署GUI,但有一件事是肯定的.JavaFX窗格加载比Swing慢,并消耗更多内存.使用JAVAFX重新设计了相同的GUI,它几乎需要200Mb,而Swing GUI只需要50Mb.
这里我举一个例子,说明如何使用FXML以编程方式创建GUI.
public class PanelCreator {
private FXMLPane<LoginPaneController> loginFXML;
private FXMLPane<RegistrationPaneController> registerFXML;
private FXMLPane<EmailValidationPaneController> emailValidationFXML;
public PanelCreator() {
this.rootPane = rootPane;
try {
loginFXML = new FXMLPane<LoginPaneController>("Login.fxml");
registerFXML = new FXMLPane<RegistrationPaneController>("Register.fxml");
emailValidationFXML = new FXMLPane<EmailValidationPaneController>("EmailValidation.fxml");
} catch (IOException e) {e.printStackTrace();} // catch
} // Constructor Method
public Pane getLoginPane() {
return loginFXML.getPane();
} // getLoginPane()
public Pane getRegisterPane() {
return registerFXML.getPane();
} // getRegisterPane
public Pane getEmailValidationPane() {
return emailValidationFXML.getPane();
} // getEmailValidationPane
public LoginPaneController getLoginPaneController() {
return …Run Code Online (Sandbox Code Playgroud) 我试图使用JavaFX CSS在按钮中插入图像.虽然,我可以使用"-fx-graphic"标签轻松完成,但我无法找到一种方法来调整我想要的任何大小的图像.
我可以通过以下FXML代码完成此操作,其中我给出了我喜欢的图像宽度30,但我想用纯CSS做到这一点.有没有办法做到这一点?
FXML
<Button text="Press Me">
<graphic>
<ImageView fitWidth="30">
<image>
<Image url="myImage.png"/>
</image>
</ImageView>
</graphic>
</Button>
Run Code Online (Sandbox Code Playgroud)
CSS
#buttonWithImage {
-fx-graphic: url("myImage.png");
}
Run Code Online (Sandbox Code Playgroud) 在这里,我正在开发一个具有Java套接字的项目,并且在服务器和客户端之间实现正确的时间同步方面存在问题。我将用一个简单的例子来描述问题:
服务器在GMT上运行,并保留包含各种项目的数据库。这些商品中有一些是特价商品,但是这些商品在到期前有时间限制。
因此,假设服务器时间现在是9:00 AM(GMT),并且有一个商品要在10:00 AM(GMT)结束。
客户端可能与服务器位于不同的时间和时区。因此,假设客户时间现在是8:00 AM(GMT-1),我可以花时间将其调整为客户的时区,发现它在9:00 AM(GMT-1)结束,即1个小时。
问题:当用户设置了自定义时间时,如何计算剩余时间。
例如,上述客户端将时钟手动设置为提前半小时,即8:30 AM(GMT-1)。如果您只是进行时区转换,则该商品仍将在9:00(GMT-1)结束,因此,要约完成的剩余时间是错误的(30分钟)。
可能有人说,一种可能的解决方案是将客户端设置为从服务器询问以秒为单位的剩余时间,而不是确切的日期结束。但是我想在客户端实现类似倒数秒的功能。(如果报价在60秒内结束,则界面将变为60,59,58,..,1,0)。因此,每秒向服务器发送一个请求以获取剩余时间并不是有效的网络。
让我担心的另一件事是,如果您确实要求“以秒为单位的剩余时间”,那么在慢速的网络上,服务器的响应将不会立即到来,因此在客户端收到结果之前,时间已经到了。
我正在构建客户端 - 服务器应用程序,我真的想建议如何设计服务器 - 数据库连接部分.我们说基本思路如下:
就我们拥有的Java对象而言
因此,当客户端连接到服务器时,会在它们之间创建会话,通过该会话交换所有数据.现在困扰我的是我是否应该为每个客户端会话创建一个数据库对象/连接,或者我是否应该创建一个将处理所有请求的数据库对象.
因此这两个概念是
使用选项1,我猜所有方法都应该同步,以避免一个客户端线程不覆盖另一个的变量.但是,在大量并发请求的情况下使其同步将是耗时的,因为每个请求将被放入队列中,直到完成一个运行.
使用选项2,似乎是一个更合适的解决方案,但为每个客户端 - 服务器会话创建一个数据库对象是一个消耗内存的任务,而且当并发连接用户的数量很大时,为每个客户端创建数据库连接可能会再次导致问题.
这些只是我的想法,所以请添加任何可能对决定有帮助的评论.
谢谢
我想知道JavaFX 8中是否有ScrollPane属性可用于侦听当前在给定时间显示的组件.例如,ScrollPane有一个VBox,它有8个按钮.滚动窗格中只能看到4个按钮.我想要一个监听器,它会在滚动位置发生变化时显示8个按钮中的4个.
我在过去几个月里一直在研究JavaFX.我试图找到一种方法来实现在根窗格/场景中显示特定窗格时触发的侦听器.在Java中,我可以使用JPanel上的ancestorListener实现它,如下所示,但我找不到JavaFX上的等效方法.
JPanel panel = new JPanel ();
panel.addAncestorListener ( new AncestorListener ()
{
public void ancestorAdded ( AncestorEvent event ) {
System.out.println("This panel is shown on screen now");
}
public void ancestorRemoved ( AncestorEvent event ){}
public void ancestorMoved ( AncestorEvent event ){}
} );
Run Code Online (Sandbox Code Playgroud) javafx ×4
javafx-8 ×3
java ×2
listener ×2
sockets ×2
button ×1
css ×1
database ×1
fxml ×1
image ×1
memory ×1
object ×1
performance ×1
properties ×1
scrollpane ×1
serversocket ×1
show ×1
timezone ×1
visible ×1