我想在JavaFX应用程序中执行可能很长的操作时将光标更改为Cursor.WAIT.我以为Platform.runLater会帮助我:
this.getStage().getScene().setCursor(Cursor.WAIT);
Platform.runLater(new Runnable() {
@Override
public void run() {
// Do some stuff
getStage().getScene().setCursor(Cursor.DEFAULT);
}
});
Run Code Online (Sandbox Code Playgroud)
但光标不会改变.为什么这不起作用?
我需要在更改文本时对多个TextField执行验证.验证完全相同,所以我认为我使用一个程序.我不能使用onInputMethodTextChanged,因为即使控件没有焦点我也需要执行验证.所以我在textProperty中添加了一个ChangeListener.
private TextField firstTextField;
private TextField secondTextField;
private TextField thirdTextField;
protected void initialize() {
ChangeListener<String> textListener = new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable,
String oldValue, String newValue) {
// Do validation
}
};
this.firstTextField.textProperty().addListener(textListener);
this.secondTextField.textProperty().addListener(textListener);
this.thirdTextField.textProperty().addListener(textListener);
}
Run Code Online (Sandbox Code Playgroud)
但是,在执行验证时,无法知道哪个TextField触发了更改.我如何获得这些信息?
标题说明了一切,但要详细说明:如果我将一个或多个绑定添加到某个属性,是否有办法在以后获取并检查它们?我希望Property类中有getBindings()方法,但显然没有.
假设我们有一个像这样的PostgreSQL表:
CREATE TABLE master (
id INT PRIMARY KEY,
...
);
Run Code Online (Sandbox Code Playgroud)
以及使用外键引用它的许多其他表:
CREATE TABLE other (
id INT PRIMARY KEY,
id_master INT NOT NULL,
...
CONSTRAINT other_id_master_fkey FOREIGN KEY (id_master)
REFERENCES master (id) ON DELETE RESTRICT
);
Run Code Online (Sandbox Code Playgroud)
有没有办法检查(从触发器功能内)主行是否可删除而不实际尝试删除它?显而易见的方法是逐个对所有引用表执行SELECT,但我想知道是否有更简单的方法.
我需要这个的原因是我有一个包含分层数据的表,其中任何行都可以有子行,并且只有层次结构中最低的子行可以被其他表引用.因此,当一行即将成为父行时,我需要检查它是否已在任何地方引用.如果是,则它不能成为父行,并且拒绝插入新的子行.
我正在使用RestEasy客户端从Web服务器检索实体列表.这是我的代码:
@ApplicationScoped
public class RestHttpClient {
private ResteasyClient client;
@Inject
private ObjectMapper mapper;
@PostConstruct
public void initialize() {
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 5000);
HttpConnectionParams.setSoTimeout(params, 5000);
HttpClient httpClient = new DefaultHttpClient(params);
this.client = new ResteasyClientBuilder().httpEngine(new ApacheHttpClient4Engine(httpClient)).build();
}
public <E> List<E> getList(final Class<E> resultClass, final String path,
MultivaluedMap<String, Object> queryParams) {
ResteasyWebTarget target = this.client.target(path);
Response response = null;
try {
response = target.queryParams(queryParams).request().get();
String jsonString = response.readEntity(String.class);
TypeFactory typeFactory = TypeFactory.defaultInstance();
List<E> list = this.mapper.readValue(
jsonString, typeFactory.constructCollectionType(ArrayList.class, resultClass));
return …Run Code Online (Sandbox Code Playgroud) 我使用以下方法从 WildFly 的 WAR 文件中获取资源:
this.getClass().getResource(relativePath)
Run Code Online (Sandbox Code Playgroud)
当应用程序部署为爆炸式 WAR 时,它会起作用。它曾经也适用于压缩的 WAR。昨天,我在 Eclipse 中对项目进行了清理和重建,但它刚刚停止工作。
当我检查资源根目录时:
logger.info(this.getClass().getResource("/").toExternalForm());
Run Code Online (Sandbox Code Playgroud)
我明白了:
file:/C:/JBoss/wildfly8.1.0.CR1/modules/system/layers/base/org/jboss/as/ejb3/main/timers/
Run Code Online (Sandbox Code Playgroud)
所以,难怪它不起作用。它可能与 JBoss 模块加载有关,但我不知道这是错误还是正常行为。
我在 StackOverflow 上发现了各种类似的问题,但没有适用的解决方案。建议之一是像这样使用 ServletContext:
@Resource
private WebServiceContext wsContext;
...
ServletContext servletContext = (ServletContext)this.wsContext.getMessageContext()
.get(MessageContext.SERVLET_CONTEXT);
servletContext.getResource(resourcePath);
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试以这种方式获取 MessageContext 时,我得到了一个 IllegalStateException。所以我基本上被卡住了。有任何想法吗?
在我能找到的几乎所有示例中,JavaFX事件处理程序都是作为匿名内部类创建的,如下所示:
button.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.getClickCount()>1) {
System.out.println("double clicked!");
}
}
});
Run Code Online (Sandbox Code Playgroud)
但是,我真的很讨厌匿名内部类(UGLY !!!),而且我也不想为每个事件处理程序创建单独的类.我想将现有方法用作事件处理程序,就像FXMLLoader一样.我的第一个想法是使用反射和泛型,这就是我想出的:
public final static <E extends Event> EventHandler<E> createEventHandler(
final Class<E> eventClass, final Object handlerInstance, final String handlerMethod) {
try {
final Method method = handlerInstance.getClass().getMethod(handlerMethod, eventClass);
return new EventHandler<E>() {
@Override
public void handle(E event) {
try {
method.invoke(handlerInstance, event);
} catch (IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
e.printStackTrace();
}
}
};
} catch (NoSuchMethodException | SecurityException e) { …Run Code Online (Sandbox Code Playgroud) 我想扩展LinkedHashMultimap(Guava 16.0.1),主要是添加返回常用预填充地图的方法.
public class MyMap extends LinkedHashMultimap<String, Object> {
}
Run Code Online (Sandbox Code Playgroud)
但是,正如我所知,大多数番石榴收藏品是最终的,而那些不是,不会暴露公共建设者.这个设计决定的可能原因是什么?什么是实现我的目标的最佳方法?我能想到的最好的方法是在我的课程中包装Multimap方法,但这远非理想.
编辑:
一些用户指出了不允许继承的正当理由.为了稍微扩展问题,我想指出几点.
如果不建议在公共API中继承,那么为什么Java自己的集合类不是最终的?
假设我广泛使用以下类:
LinkedHashMultimap <类<?扩展BaseEntity>,BiConsumer <?扩展BaseEntity,?extends Object >>
现在,这是一个满口.如果我可以:
public class ConsumerMap extends LinkedHashMultimap<Class<? extends BaseEntity>, BiConsumer<? extends BaseEntity, ? extends Object>> {
}
Run Code Online (Sandbox Code Playgroud)
然后我可以在我的代码中使用ConsumerMap而不是那个怪物.我相信只有可读性才足以证明继承的合理性.
在PostgreSQL中,我想根据某些条件选择一行,但如果没有符合条件的行,我想返回第一行.该表实际上包含一个序数列,因此任务应该更容易(第一行是序号为0的那一行).例如:
SELECT street, zip, city
FROM address
WHERE street LIKE 'Test%' OR ord = 0
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,没有办法保证匹配的记录的顺序,我没有任何东西可以按顺序排序.使用单个SELECT语句执行此操作的方法是什么?
我需要一个具有以下要求的正则表达式:
到目前为止,我有以下内容:
^[A-Za-z0-9][A-Za-z0-9/ ]{0,18}[A-Za-z0-9]$
Run Code Online (Sandbox Code Playgroud)
我认为它涵盖了除连续斜线之外的所有内容.有没有办法在Java正则表达式中满足此要求?
当用户选择/取消选择CheckBox时,我想更改JavaFX TableView的行高。我能找到的唯一方法是通过CSS,所以我尝试了:
if (someCheckBox.isSelected())
tableView.setStyle(".table-row-cell {-fx-cell-size: 60px;}");
else
tableView.setStyle(".table-row-cell {-fx-cell-size: 20px;}");
Run Code Online (Sandbox Code Playgroud)
但这是行不通的。任何建议,将不胜感激。
我想有一个包含值来比较表和操作员使用(=,!=,~,!~等).例如:
CREATE TABLE rule (
value1 varchar NOT NULL,
op1 varchar NOT NULL,
value2 varchar NOT NULL,
op2 varchar NOT NULL,
...
);
Run Code Online (Sandbox Code Playgroud)
我想要的可以使用这个伪代码来描述:
SELECT * FROM rule WHERE value1 op1 ?;
Run Code Online (Sandbox Code Playgroud)
在示例中,我将操作符存储在单独的列中,但我对其他解决方案持开放态度.
java ×6
javafx ×3
postgresql ×3
sql ×3
javafx-2 ×2
dynamic-sql ×1
getresource ×1
guava ×1
javafx-8 ×1
jboss ×1
plpgsql ×1
reflection ×1
regex ×1
resteasy ×1
sql-delete ×1
sql-limit ×1
where-clause ×1
wildfly-8 ×1