我刚刚学习了基础知识后开始编写我的第一个JavaFX 2应用程序,并希望将其国际化.
我注意到在JavaFX 1.x中,脚本语言允许非常简单的字符串国际化.JavaFX 2中是否有类似的功能?
基本上:JavaFX 2应用程序国际化的最佳实践是什么?
我有一个显示人员联系方式的JavaFX 2表,让我们想象有三列:名字,姓氏和电子邮件地址.当我的应用程序启动时,它会在表格中填入几行有关系统中已有人员的数据.
问题是列宽都是一样的.大多数情况下,名字和姓氏都会完整显示,但电子邮件地址会被剪裁.用户可以双击标题中的分隔符来调整列的大小,但这将很快变得乏味.
一旦预先填充了表,我想以编程方式调整所有列的大小以显示它们包含的数据,但我无法弄清楚如何实现这一点.我可以看到我可以打电话,col.setPrefWidth(x)但这并没有真正帮助,因为我必须猜测宽度.
我刚刚从7.0升级到NetBeans 7.1.在打开一个JSF托管bean时,它"帮助"告诉我它找不到我的beans.xml文件,所以我喜欢它为我创建.我知道我在WEB-INF下有一个beans.xml文件,但我还是说是的,看看发生了什么.我为META-INF创建了一个新的beans.xml.
以为我犯了一个错误,我删除了WEB-INF下的文件只是为了让我的应用程序在启动时失败.将beans.xml放回WEB-INF修复了这个问题.这个页面似乎认为这两个位置都是有效的:http://seamframework.org/Documentation/WhatIsBeansxmlAndWhyDoINeedIt
那么,问题是beans.xml在WEB-INF或META-INF中应该存在哪个文件夹?
我正在运行GlassFish 3.1.1和Java 7
我有一个表"tbl",看起来像这样:
prod | cust | qty
p1 | c1 | 5
p1 | c2 | 10
p2 | c1 | 2
p3 | c2 | 8
Run Code Online (Sandbox Code Playgroud)
我需要的是一个明确的产品和客户对列表,但只有第一个客户,如果产品销售给多个客户.换句话说,结果需要如下所示:
prod | cust
p1 | c1
p2 | c1
p3 | c2
Run Code Online (Sandbox Code Playgroud)
我已经尝试了每一种我能想到的方式,但我无法得到正确的结果.很明显,既不是不同的也不是group by(因为它们都将返回p1,c2行).
我发现这个问题是一个非常接近的匹配,但我无法弄清楚如何重新编写它以使它做我需要的.
最重要的是,目前所有这些都需要在Access 2007或更高版本中运行,但在将来的某个时候它也需要在MySQL中运行.
对于也将结果加入到客户表中的任何人来说,这是额外的功劳,这样我就可以从客户代码中查找人类可读的名称,例如c1 => Fred Bloggs Spanners
我一直在尝试设置我的应用程序,以便我可以整天测试它的EJB,但我似乎无法超越看似简单的问题.
我在NetBeans 6.9中设置了标准的Maven Web应用程序.我已经自动为其中一个EJB生成了单元测试,但每当我去运行它时,我都会收到错误消息:
Testcase: initializationError(com.example.ExampleTest): Caused an ERROR
Absent Code attribute in method that is not native or abstract in class file javax/ejb/embeddable/EJBContainer
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/ejb/embeddable/EJBContainer
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
Run Code Online (Sandbox Code Playgroud)
我已经研究了这个,我很确定问题是我的pom当前指向一个只包含API的jar
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
不是和可用于运行测试的实现.我很确定在尝试执行@BeforeClass的方法中测试失败了
container = EJBContainer.createEJBContainer();
Run Code Online (Sandbox Code Playgroud)
标准推荐的解决方案是将glassfish-embedded-all工件添加为具有测试范围的第一个项目依赖项
<dependency>
<groupId>org.glassfish.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>3.0.1</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我可以在这里找到这个工件的Maven包:http://download.java.net/maven/glassfish/但是Nexus不能将这个目录或任何子目录识别为Maven 2存储库.我想我可以下载jar并手动将其安装到Nexus中,但这似乎打败了安装Nexus的人.
那么,是否有一个Maven存储库,Nexus能够编制索引以便为我提供glassfish-embedded-all工件?我读过的一些帖子提到现在正在使用的正确工件是javax.ejb,但我找不到更多的运气了.
你可能已经猜到我对单元测试是全新的,而且对JEE6来说还是比较新的; 这甚至是单元测试EJB的正确方法吗?
我有一个类,其日期字段表示一段数据的"有效起始日期".它的定义如下:
@Temporal( TemporalType.DATE )
private Date validFrom;
Run Code Online (Sandbox Code Playgroud)
在我从数据库中提取日期并显示它之前,似乎一切正常.如果我在前端选择2003年9月18日的日期,那么当我在数据库中检查确定的日期是保存的日期时保存它(数据库是MySQL 5.5.9列类型是DATE).然而,当我拿出一份清单时,显示的日期是2003年9月17日 - 前一天.
如果我选择在2003年3月26日或2003年12月25日之前或之后的一个日期,一切都很好,所以我猜这是与夏令时有关但错误在哪里蔓延?由于数据库似乎保持正确的日期,我猜测它必须在JPA转换回java.util.Date时 - java.util.Date是用于日期的最佳类吗?我已经看过一些人们使用Calendar的例子,但这看起来非常重,我不确定它能用于基于JSF的前端.
我有一个相当标准的Java EE6 Web应用程序使用JPA 2,依赖注入连接到MySQL数据库,一切正常.我现在要做的是让这个应用程序与我们在客户端站点安装的其他应用程序的数据库进行交互 - 基本上作为我们其他应用程序安装的单一控制点.
我正在努力的是如何最好地与其他数据库进行交互.理想情况下,我想为每次安装创建一个EntityManager并使用JPA进行交互,但我看不出任何设置方法.例如,我可能有一个应用程序类型的5个安装(以及数据库),并且主控制应用程序在运行时之前不会知道其他安装.这似乎排除了使用EntityManager的依赖注入和所有自动事务demacation等等.替代选项是只创建一个DataSource并手动进行交互.虽然灵活,但这显然需要更多的努力.
所以,我的问题是如何最好地解决这个问题?
我有一个不断增长的Web应用程序,现在需要能够存储用户和系统首选项/设置.在过去,我总是推出自己的网络应用程序偏好系统,但我想知道其他人做了什么来解决这个问题?是否有人们可以推荐的Web应用程序的首选项库?
理想情况下,用户首选项应具有默认值,然后用户可以覆盖该默认值.并非所有首选项都应该向用户公开,因为有些首选项将用于对话框的最后位置.
如果我使用roll-my-own路由,我认为它将是一个单独的首选项表,所有首选项都存储为字符串,根据需要转换为真实的原始数据类型.例如,类似于key,user_key,setting_name,setting_value的表.我喜欢这种方法来处理每种数据类型的列,因为它会阻止设置意外地以两个值结束,并且设置的使用者应该知道他们想要什么样的数据类型.
我确定我是傻瓜,但我似乎无法想出这一个......
我有两张桌子:
部门(做,名字)员工(开斋节,第一,最后,做)
他们有相应的实体JPA管理的entites部门和员工.员工有一个Deparment字段,Department没有维护Employee列表.我想做的是找到所有没有员工的部门.使用普通的旧SQL,左连接很容易:
SELECT d.*
FROM department as d LEFT OUTER JOIN employee as e
ON d.did = e.did
WHERE e.did IS NULL
Run Code Online (Sandbox Code Playgroud)
我无法看到如何将此查询转换为JPQL.例如,我在JPQL左连接中找到的所有示例都以另一种方式遍历链接.
SELECT e FROM Employee e LEFT JOIN e.departmert d
Run Code Online (Sandbox Code Playgroud)
而我需要更像的东西
SELECT d FROM Department d LEFT JOIN d.???? WHERE e.department IS NULL
Run Code Online (Sandbox Code Playgroud)
但该部门没有保留对其员工的提及(在我的申请中,显然不是部门和员工).这在JPQL中甚至可能吗?
我的数据库中的表格格式如下:
customer old_code new_code
C1 A X
C1 B Y
C2 C Y
C2 D Z
Run Code Online (Sandbox Code Playgroud)
所以键对customer和old_code映射到new_code.这是一种很好的存储数据的方式,查找非常快,但对于人类消费,数据会更好地显示如下:
C1 C2
X A
Y B C
Z D
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法使用SQL将数据转换为第二个视图?显然可以有任意数量的客户,虽然我可以事先查询独特的设置.目前我有<50000条记录,我希望这是常态,但我希望任何可能的解决方案扩展到几十万.我的应用程序目前针对MySQL.
我一直在学习JavaFX 2,但我遇到了可编辑表格单元的问题,我也找不到解决方案.为了在大量代码中保存粘贴,我创建了一个只包含JavaFX文档中的TableView示例的项目:http://docs.oracle.com/javafx/2/ui_controls/table-view.htm
如果您运行此代码,您会看到以下行为:
问题是三次点击才能到达可以编辑单元格的位置.我想要实现的是当创建的文本字段(例如步骤2)焦点直接切换到文本字段时.
关于如何实现这一点,我最好的猜测是添加textField.requestFocus()到方法的最后startEditing():
@Override
public void startEdit() {
super.startEdit();
if (textField == null) {
createTextField();
}
setGraphic(textField);
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
textField.selectAll();
textField.requestFocus();
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.如果我在文本字段中添加一个焦点监听器,我发现它会获得焦点,但之后又会丢失它.在监听器中粘贴断点似乎表明TableView在显示文本字段之前将焦点恢复.
因此,问题是如何在编辑开始时将焦点放在文本字段上?
我确信有一个简单的解决方案,但它让我陷入困境,所以希望有人可以帮助我.我有多行输入,如下所示:
FooABC
Foo XYZ123
FooFgh
Run Code Online (Sandbox Code Playgroud)
我需要一个正则表达式(在Java中),它将给我:
ABC
XYZ123
Fgh
Run Code Online (Sandbox Code Playgroud)
到目前为止我提出的最好的是:
[^Foo\s?].*$
Run Code Online (Sandbox Code Playgroud)
我认为这是有效的,直到我注意到它从Fgh移除了首都F. 有什么方法可以让它完全忽略前三个字符和一个或多个空格字符,然后捕获其他所有内容?
编辑/澄清
我应该说我不能使用字符串/替换或任何事情,我会在这种情况下,通常这样做,因为这个表达式将被送入部署的代码,目前还不能进行更新.代码的作用是:
Pattern pattern = Pattern.compile( regex );
Matcher matcher = pattern.matcher( data );
matcher.find();
String extracted = matcher.group();
Run Code Online (Sandbox Code Playgroud)
然后它将提取的字符串用作查找的关键字.所以它必须一次性提取密钥.
我需要在具有可变列数的TableView中更改任意单元格的样式.下面的代码显示了基本问题.
ExampleRow类是来自电子表格的真实数据的代理,其他功能是保存突出显示信息.由于我不知道会有多少列,所以我只保留一列应该突出显示的列(不支持列重新排列).ExampleTableCell类只设置单元格的文本,并根据需要应用突出显示.
如果我在绘制表格[cell(2,2)]之前设置了一个高亮显示,那么当应用程序启动时,单元格会正确显示红色文本.问题是单击按钮设置单元格(1,1)以突出显示但表格不会更改.如果我将应用程序窗口调整为空,则再次打开它,正确绘制单元格(1,1)的突出显示 - 可能是因为此过程强制完全重绘.
我想知道的是如何触发表重绘新突出显示的单元格(或所有可见单元格),以便样式正确?
TIA
package example;
import java.util.HashSet;
import java.util.Set;
import javafx.application.Application;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.util.Callback;
public class CellHighlightExample extends Application {
private final int columnCount = 4;
private final int rowCount = 5;
private TableView<ExampleRow> table = new TableView<>();
@Override
public void start(Stage stage) {
BorderPane root = …Run Code Online (Sandbox Code Playgroud)