小编nac*_*okk的帖子

如何将图像添加到JPanel?

我有一个JPanel,我想添加我动态生成的JPEG和PNG图像.

到目前为止我在Swing教程中看到的所有示例,特别是在Swing示例中使用的ImageIcon是s.

我将这些图像生成为字节数组,并且它们通常比它们在示例中使用的常见图标大,为640x480.

  1. 使用ImageIcon类在JPanel中显示大小的图像时是否存在(性能或其他)问题?
  2. 什么是平常做的呢?
  3. 如何在不使用ImageIcon类的情况下将图像添加到JPanel?

编辑:仔细检查教程和API会显示您无法将ImageIcon直接添加到JPanel.相反,它们通过将图像设置为JLabel的图标来实现相同的效果.这感觉不对......

java swing image jpanel

336
推荐指数
13
解决办法
98万
查看次数

将项添加到JComboBox

我在面板上使用了一个组合框,据我所知,我们只能添加带有文本的项目

    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)

有没有办法在组合框项目中设置值和标题?

现在我使用哈希来解决这个问题.

java swing jcombobox

18
推荐指数
1
解决办法
11万
查看次数

从内部匿名类访问外部匿名类

我只是好奇.有没有办法访问另一个匿名类中的匿名类中的父级?

我让这个例子创建一个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(..)

java anonymous-class

17
推荐指数
1
解决办法
3979
查看次数

重写getPreferredSize()会破坏LSP

我总是在这个覆盖的站点中看到建议,getPreferredSize() 而不是setPreferredSize() 像以前的这些线程中所示那样使用.

  1. 使用重写getPreferredSize()而不是对固定大小的组件使用setPreferredSize()
  2. 我应该避免在Java Swing中使用set(Preferred | Maximum | Minimum)Size方法吗?
  3. 重写setPreferredSize()和getPreferredSize()

看这个例子:

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)

java swing liskov-substitution-principle jcomponent

10
推荐指数
2
解决办法
924
查看次数

为某些包Spring MVC设置不同的ObjectMapper

有没有办法使用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.

java spring spring-mvc jackson

6
推荐指数
1
解决办法
739
查看次数

Play框架 - Scala,Method定义了两次

我想将多个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)

scala playframework playframework-2.0 playframework-2.1

5
推荐指数
1
解决办法
916
查看次数

为两个或更多方法实现匿名类

这是来自oracle关于我正在阅读的匿名类的文章:

如果必须实现包含两个或更多方法的接口,则匿名类是理想的

我认为如果你必须实现少于两个方法,这是理想的,因为你不需要创建更具体的命名类,但如果你必须实现两个以上将更难以理解.

我的问题是:为什么要用2种或更多方法实现匿名类是理想的?

java anonymous-class java-8

5
推荐指数
1
解决办法
1182
查看次数

如何正确使用SwingWorker上的publish()和process()方法?

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的上下文中,工作流程是什么?

如果需要澄清,请告诉我.

java swing swingworker

5
推荐指数
1
解决办法
4592
查看次数

无法加密配置文件中的密码

我在加密数据库密码时遇到问题 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)

java encryption hibernate jasypt

5
推荐指数
1
解决办法
9969
查看次数

Javadocs的Lokups 8

java8的javadocs查找使用-param-用于参数分离,在intellij中它使用(param),因此每次查找都在java 8 docs中失败.有没有办法来解决这个问题?

java intellij-idea java-8

5
推荐指数
1
解决办法
257
查看次数