我有一个非常大的摇摆应用程序,我想让它记住所有窗口,jframes等的大小.因此,如果用户调整窗口他喜欢的方式,下次窗口看起来完全相同的方式.
我有更好的选择来解决它,但手动在首选项中写入每个窗口的位置/大小?有没有方便的方法来存储JTable中的列顺序?可能是一些框架?只是不想写样板文件.
遗憾的是,整个大应用程序的序列化不是一种选择.
"有效Java"中提到了"通过接口引用对象"是一种很好的做法.所以例如我更喜欢
List<String> al = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
过度
ArrayList<String> al = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
在我的代码中.一件令人讨厌的事情是,如果我输入ArrayList<String> al = new然后按下Eclipse中的Ctrl + Space,我会得到一个ArrayList<String>()propostal.但是如果我输入List al = new然后点击Ctrl + Space我将只得到propostal来定义匿名内部类,但不是propostal,例如new ArrayList<String>(),99%的情况,或者例如new Vector<String>().
问题:有没有办法将子类作为泛型类型的propostals?
我有一个字符串列表,我想在 beans.xml 中定义它。
<util:list id="myFractions" value-type="java.lang.String">
<value>#{ T(com.myapp.longname.verylong.WelcomeController).RED_FRACTION }</value>
<value>#{ T(com.myapp.longname.verylong.WelcomeController).BLUE_FRACTION }</value>
<value>#{ T(${my.prefix}).GREEN_FRACTION }</value>
</util:list>
Run Code Online (Sandbox Code Playgroud)
它工作正常,但每次我都需要编写完整的限定常量名称com.myapp.longname.verylong.WelcomeController。我只想写一次。我发现的一个解决方案是将其替换为类似的属性my.prefix,这样我就可以只写我的短前缀而不是真正的完整路径。但随后我需要用只需要一次的属性来污染全局“命名空间”。我想仅为该列表或至少仅为该 beans.xml 文件定义一个占位符。我已经尝试直接在 beans.xml 中定义一个属性并且PropertyPlaceholderConfigurer它有效,但是我所有的初始属性都不再可用。
那么如何避免com.myapp.longname.verylong.WelcomeController每次都在列表中作为前缀写入并且只定义一次呢?理想情况下是这样的
<util:list id="myFractions" value-type="java.lang.String">
<define-local-placeholder name="my.prefix" value="com.myapp.longname.verylong.WelcomeController" />
<value>#{ T(${my.prefix}).RED_FRACTION }</value>
<value>#{ T(${my.prefix}).BLUE_FRACTION }</value>
<value>#{ T(${my.prefix}).GREEN_FRACTION }</value>
</util:list>
Run Code Online (Sandbox Code Playgroud) 我想,以取代GridBagLayout用MigLayout.问题是,如果我调用obj.setVisible(false)某个对象GridBaglayout,布局会缩小.但MigLayout它仍然隐藏着.你知道某种MigLayout表演方式GridBagLayout吗?
从swing工作者与EDT交互的常用方法是使用get()方法.但我有一个很长的任务和代码,如下所示:
public Void doInBackground() {
for(Object o : objects) {
doSomething();
MyGlobalGUIConsole.addMessage("Done for " + o);
}
}
Run Code Online (Sandbox Code Playgroud)
在大多数tutotials中,建议使用返回值从SwingWorker返回到EDT,但我可以:
public Void doInBackground() {
for(Object o : objects) {
doSomething();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MyGlobalGUIConsole.addMessage("Done for " + o);
}
});
}
}
Run Code Online (Sandbox Code Playgroud) 所以如果代码:
if(f() && false) {
// never happens
}
Run Code Online (Sandbox Code Playgroud)
我能否始终确定f()将被调用并且永远不会被编译器"优化掉"?
我正在尝试编译此Json.NET代码:
using Newtonsoft.Json;
...
MyDesc d = JsonConvert.DeserializeObject<MyDesc>(jsonInput);
...
Run Code Online (Sandbox Code Playgroud)
通过mono使用此命令(在ubuntu上):
$ mcs Main.cs -lib:/home/username/JsonNET/Net40/Newtonsoft.Json.dll
Run Code Online (Sandbox Code Playgroud)
但是我收到“没有程序集引用”的错误:
error CS0246: The type or namespace name `Newtonsoft' could not be found.
Are you missing an assembly reference
Run Code Online (Sandbox Code Playgroud)
正确的Json.NET Mono组装参考是什么?
(-lib选项对此很合适,但是它不起作用-lib:PATH1[,PATHn] Specifies the location of referenced assemblies)
我想在屏幕上突出显示一些元素,当选择PopupMenu中的一个JMenuItem时(鼠标悬停).所以我在我的JMenuItem上使用MouseListener
@Override
public void mouseEntered(MouseEvent e) {
highlightOn();
}
@Override
public void mouseExited(MouseEvent e) {
highlightOff();
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但如果我按Esc弹出菜单将关闭,而不清理highligt.我如何拦截JPopupMenu的关闭来处理这个问题?
我想在java语法中进行一些更改.例如,我想使用运算符'+'来添加向量.所以我想要这个代码:
public class Vector2 {
public float x, y;
public Vector2(float x, float y) {this.x = x;this.y = y;}
public String toString() {...}
public static Vector2 operator+(Vector2 a, Vector2 b) {
return new Vector2(a.x + b.x, a.y + b.y);
}
public static void main(String[] args) {
Vector2 a = new Vector2(3, 6);
Vector2 b = new Vector2(2, 8);
System.out.println(a + b);
}
}
Run Code Online (Sandbox Code Playgroud)
将被转换为这个标准的java代码:
public class Vector2 {
public float x, y;
public Vector2(float x, float y) {this.x …Run Code Online (Sandbox Code Playgroud) Hibernate 4使用jdbc4,将方法setBinaryStream(int,InputStream,int)的签名更改为setBinaryStream(int,InputStream,long).C3P0不支持这种新方法.
因此调用saveOrUpdate(myObjWithBlob)结果
java.lang.AbstractMethodError: com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
at $Proxy75.setBinaryStream(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
那我现在该怎么办?
1)不要使用c3p0.DHCP,BoneCP或根本没有连接池. - 真的不是我想要的选择.
2)以某种方式让hibernate避免调用这个新方法?有可能吗?
3)切换回休眠3 - 对我来说也不是很好.
java ×10
swing ×4
autocomplete ×1
c3p0 ×1
eclipse ×1
generics ×1
hibernate ×1
invokelater ×1
jmenuitem ×1
jpopup ×1
jpopupmenu ×1
json.net ×1
junit ×1
layout ×1
miglayout ×1
mono ×1
persistence ×1
preprocessor ×1
spring ×1
spring-boot ×1
swingworker ×1
tostring ×1