我有一个JPanel,我想添加我动态生成的JPEG和PNG图像.
到目前为止我在Swing教程中看到的所有示例,特别是在Swing示例中使用的ImageIcon是s.
我将这些图像生成为字节数组,并且它们通常比它们在示例中使用的常见图标大,为640x480.
编辑:仔细检查教程和API会显示您无法将ImageIcon直接添加到JPanel.相反,它们通过将图像设置为JLabel的图标来实现相同的效果.这感觉不对......
我在面板上使用了一个组合框,据我所知,我们只能添加带有文本的项目
comboBox.addItem('item text');
Run Code Online (Sandbox Code Playgroud)
但有时我需要使用项目和项目文本的一些值,如在html中选择:
<select><option value="item_value">Item Text</option></select>
Run Code Online (Sandbox Code Playgroud)
有没有办法在组合框项目中设置值和标题?
现在我使用哈希来解决这个问题.
我只是好奇.有没有办法访问另一个匿名类中的匿名类中的父级?
我让这个例子创建一个JTable子类(匿名类)覆盖changeSelection,在里面我创建另一个匿名类.
MCVE:
public class Test{
public static void main(String args []){
JTable table = new JTable(){
@Override
public void changeSelection(
final int row, final int column,
final boolean toggle, final boolean extend) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
super.changeSelection(row, column, toggle, extend);
//more code here
}
});
}
};
}//end main
}//end test
Run Code Online (Sandbox Code Playgroud)
我怎么能参考super.changeSelection(..)?
我总是在这个覆盖的站点中看到建议,getPreferredSize() 而不是setPreferredSize() 像以前的这些线程中所示那样使用.
看这个例子:
public class MyPanel extends JPanel{
private final Dimension dim = new Dimension(500,500);
@Override
public Dimension getPreferredSize(){
return new Dimension(dim);
}
public static void main(String args[]){
JComponent component = new MyPanel();
component.setPreferredSize(new Dimension(400,400));
System.out.println(component.getPreferredSize());
}
}
Run Code Online (Sandbox Code Playgroud)
setPreferredSize()
- 设置此组件的首选大小.
getPreferredSize()
- 如果preferredSize已设置为非null值,则返回它.如果UI委托的getPreferredSize方法返回非null值,则返回该值; 否则遵从组件的布局管理器.
所以这样做显然打破了Liskov替代原则.
prefferedSize是一个绑定属性,所以当你设置它时firePropertyChange执行.所以我的问题是,当你覆盖时,getPrefferedSize()你不需要覆盖setPreferredSize(..)吗?
例:
public class MyPanel extends JPanel{
private Dimension dim = null;
@Override
public Dimension …Run Code Online (Sandbox Code Playgroud) 有没有办法使用spring为我的项目中的某些包设置HttpMessageConverter?
@Configuration
@EnableWebMvc
@ComponentScan(basePackageClasses = MyConfig.class)
public class MyConfig
extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
for (HttpMessageConverter<?> converter : converters) {
if (converter instanceof MappingJacksonHttpMessageConverter) {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
objectMapper.setSerializationInclusion(Inclusion.NON_NULL);
((MappingJacksonHttpMessageConverter) converter).setObjectMapper(objectMapper);
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用它 PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES,更改项目中的所有响应,我希望这仅适用于某些dto.
我想将多个URL映射到重载的控制器方法,如下所示.但我收到错误"方法帐户定义了两次".那么,是否可以在scala-play框架中执行此操作?
GET /order/:userId controllers.Application.account(userId)
GET /order/:userId/:date controllers.Application.account(userId, date)
Run Code Online (Sandbox Code Playgroud) 如果必须实现包含两个或更多方法的接口,则匿名类是理想的
我认为如果你必须实现少于两个方法,这是理想的,因为你不需要创建更具体的命名类,但如果你必须实现两个以上将更难以理解.
我的问题是:为什么要用2种或更多方法实现匿名类是理想的?
SwingWorker中的这两个方法 目前让我感到困惑,似乎很容易错误地使用它们.
方法publish()描述了以下内容:
将数据块发送到进程(java.util.List)方法.此方法将从doInBackground方法内部使用,以提供中间结果,以便在流程方法内的事件调度线程上进行处理.
这对我来说意味着当我的工作线程正在执行其doInBackground()方法时,我能够创建"块"(这些是特定的还是这只是一种引用消息对象的方法?),然后发布它们在我的Swing GUI上进行处理.
这导致我进行处理().javadoc概述了以下内容:
在Event Dispatch Thread上异步接收来自publish方法的数据块.
在查看了这两种方法的文档后,是否有人可以澄清这种方法背后的机制是什么?据我所知,这是一个异步过程,但由于它是在EDT上进行的,我想象中有一些可预测性.
该publish()文档的状态这样的:
因为在Event Dispatch Thread上异步调用了process方法,所以在执行process方法之前可能会对publish方法进行多次调用.出于性能目的,所有这些调用都合并为一个带有连接参数的调用.
总结一下,我的问题有两个:
process()?process()在SwingWorker和EDT的上下文中,工作流程是什么?如果需要澄清,请告诉我.
我在加密数据库密码时遇到问题 hibernate.cfg.xml
这是我的属性文件.
<!-- Database connection settings -->
<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="connection.url">jdbc:sqlserver://localhost:1433;databaseName=TEST;</property>
<property name="connection.username">sa</property>
<!-- Encryption -->
<property name="connection.password">ENC(vMO/j5jfpaU2cUhPVoOk5Q==)</property>
<property name="connection.provider_class">org.jasypt.hibernate4.connectionprovider.EncryptedPasswordDriverManagerConnectionProvider</property>
<property name="connection.encryptor_registered_name">hibernateEncryptor</property>
Run Code Online (Sandbox Code Playgroud)
然后在HiberanteUtil.java我有这个
// Builds session factory.
private static SessionFactory configureSessionFactory()
throws HibernateException {
Configuration configuration = new Configuration().configure();
StandardPBEStringEncryptor encryptor =
new StandardPBEStringEncryptor();
encryptor.setPassword("pass");
HibernatePBEEncryptorRegistry registry =
HibernatePBEEncryptorRegistry.getInstance();
registry.registerPBEStringEncryptor("hibernateEncryptor", encryptor);
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(configuration.getProperties()).buildServiceRegistry();
return configuration.buildSessionFactory(serviceRegistry);
}
Run Code Online (Sandbox Code Playgroud)
我用它创建了加密密码encrypt.bat.
然后我有错误
com.microsoft.sqlserver.jdbc.SQLServerException:用户'sa'登录失败.ClientConnectionId:8033573f-5f52-4fe9-A728-fbe4f57d89c4
如果我删除这部分
StandardPBEStringEncryptor encryptor =
new StandardPBEStringEncryptor();
encryptor.setPassword("someKey");
HibernatePBEEncryptorRegistry registry =
HibernatePBEEncryptorRegistry.getInstance();
registry.registerPBEStringEncryptor( …Run Code Online (Sandbox Code Playgroud) java8的javadocs查找使用-param-用于参数分离,在intellij中它使用(param),因此每次查找都在java 8 docs中失败.有没有办法来解决这个问题?
java ×9
swing ×4
java-8 ×2
encryption ×1
hibernate ×1
image ×1
jackson ×1
jasypt ×1
jcombobox ×1
jcomponent ×1
jpanel ×1
liskov-substitution-principle ×1
scala ×1
spring ×1
spring-mvc ×1
swingworker ×1