小编Ser*_*kyy的帖子

整数缓存有多大?

Integer具有缓存,缓存Integer值.因此,如果我使用方法valueOf或收件箱,新值将不会被实例化,而是从缓存中获取.

我知道默认缓存大小是127因为VM设置而可以扩展.我的问题是:在这些设置中缓存大小的默认值有多大,我可以操纵这个值吗?这个值取决于我使用的是哪个VM(32位还是64位)?

我现在正在调整遗留代码,可能需要从int转换为Integer.

澄清:遵循我在Java源代码中找到的代码

private static class IntegerCache {
    static final int low = -128;
    static final int high;
    static final Integer cache[];

    static {
        // high value may be configured by property
        int h = 127;
        String integerCacheHighPropValue =
            sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
        if (integerCacheHighPropValue != null) {
            int i = parseInt(integerCacheHighPropValue);
            i = Math.max(i, 127);
            // Maximum array size is Integer.MAX_VALUE
            h = Math.min(i, Integer.MAX_VALUE - (-low));
        }
        high = h;

        cache = …
Run Code Online (Sandbox Code Playgroud)

java boxing integer

8
推荐指数
1
解决办法
5754
查看次数

具有索引和散列访问的集合

我需要一个具有快速索引和哈希访问权限的集合类.现在我有了ArrayList.它具有良好的索引访问,但他的contains方法不具备性能.HashSet具有良好的contains实现,但没有索引访问.哪个系列都有?可能来自Apache的东西?或者我应该创建自己的集合类,它具有:用于索引访问的ArrayList和用于contains检查的HashSet ?

只是为了澄清:我需要get(int index)contains(Object o)

java collections contains hashcode

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

java 中的本地化异常

我有一个用于验证用户输入的界面。为了进行验证,我使用了一些标准 Java 验证器和一些自定义验证器。我的自定义验证器在出错时抛出 ParseException 并带有本地化消息。但我不知道Java或第三方lib是否也使用本地化消息。

问题:如何在 catch 块中获取异常是否有本地化消息的提示(标准 Java 方式,而不是自定义异常类/接口)?

java localization

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

在未修饰的JFrame中支持Windows-Left和Windows-Right

我使用带有自定义标题栏和自定义缩放器的未修饰的JFrame.一切正常,但是当我制作一个JFrame未修饰时,我失去了对Windows-Left/Right键绑定的支持(似乎它是由Windows本机实现的).我想为我的应用程序重新实现此功能.我的问题:我可以在一个关键监听器中检测到是否按下了Windows键,但我无法检测是否另一个键(在我的情况下为左/右)与Windows键一起按下(在InputEvent中没有修饰符WINDOWS_MASK_DOWN).可能有人知道解决方法吗?

这是我的代码:

import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class HeadlessFrameTest {

    public static void main(String[] args) {
        final JFrame frm = new JFrame("Test");
        final JTextField field = new JTextField();
        frm.add(field, BorderLayout.NORTH);
        field.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                System.out.println(e);
            }
        });
        frm.setUndecorated(true);
        frm.setSize(500, 550);
        frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frm.setVisible(true);
    }

}
Run Code Online (Sandbox Code Playgroud)

java swing keylistener

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

JLayer和JPanel的绘画问题

我想在用户输入无效时绘制一个图标.我找到了Oracle的一个例子并为我的目的修改了它.Icon的绘画工作正常,但是当我更改值以更正时,图标不会完全不可见:仍然会显示在JPanel上绘制的部分.

这是我的代码:

import java.awt.AlphaComposite;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.text.NumberFormat;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayer;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.plaf.LayerUI;

public class FieldValidator extends JPanel {
    private static final int ICON_SIZE = 12;
    private static final Icon ICON = createResizedIcon((ImageIcon) UIManager.getIcon("OptionPane.errorIcon"));
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                createUI();
            }
        });
    }

    public …
Run Code Online (Sandbox Code Playgroud)

java swing jlayer

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

JTextField 在重量级弹出窗口中没有焦点

我想在弹出窗口中显示一个文本。当弹出完全在应用程序框架上时 (MediumWeightPopup) - 一切正常,但是当弹出的一部分在框架之外 (HeavyWeightPopup) 时,它无法聚焦。在这种情况下,插入符号是不可见的,并且无法输入文本。

这是我的代码:

import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.Popup;
import javax.swing.PopupFactory;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class PopupTest {

    public static void main(String[] args) {
        JFrame frm = new JFrame("Popup test");
        JPanel p = new JPanel();
        p.addMouseListener(new MouseAdapter() {
            Popup pop;
            @Override
            public void mouseReleased(MouseEvent e) {
                if (SwingUtilities.isRightMouseButton(e)) {
                    if (pop != null) {
                        pop.hide();
                    }
                    JPanel popupPanel = new JPanel(new BorderLayout());
                    JTextField field = new JTextField(20); …
Run Code Online (Sandbox Code Playgroud)

java swing popup

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

JComboBox防止弹出窗口关闭

我需要在组合框中提供一些禁用的项目。除了防止在单击禁用的项目后关闭组合框之外,所有其他方法都工作正常。

这是我的代码:

import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.plaf.basic.BasicComboBoxRenderer;
import javax.swing.plaf.basic.ComboPopup;


public class DisabledCombo {

    public static void main(String[] args) {
        final DisabledSupportComboModel model = new DisabledSupportComboModel();
        model.addElement(new Item("First element"));
        model.addElement(new Item("Second element"));
        model.addElement(new Item("Disabled", false));
        model.addElement(new Item("Fourth element"));
        final JComboBox<Item> itemCombo = new JComboBox<DisabledCombo.Item>(model);
        itemCombo.setRenderer(new DisabledSupportComboRenderer());
        final ComboPopup popup = (ComboPopup) itemCombo.getUI().getAccessibleChild(itemCombo, 0);
        final JList<?> l = popup.getList();
        final MouseListener[] listeners = l.getMouseListeners();
        for …
Run Code Online (Sandbox Code Playgroud)

java swing jcombobox

4
推荐指数
1
解决办法
1721
查看次数

PMD等于警告错误?

对于以下代码

boolean changed = null == oldValue? oldValue != newValue : !oldValue.equals(newValue);
Run Code Online (Sandbox Code Playgroud)

我收到PMD警告:"使用equals()来比较对象引用".但如果我遵循这个提议,我会得到一份NPE.这是PMD规则的错误还是我的编程风格简直不好?

java pmd

2
推荐指数
1
解决办法
154
查看次数

从Swing应用程序的EDT事件处理程序代码内部启动线程

我对Swing Event Dispatcher Thread(EDT)的理解是,它是执行事件处理代码的专用线程。因此,如果我的理解是正确的,那么在下面的示例中:

private class ButtonClickListener implements ActionListener{
   public void actionPerformed(ActionEvent e) {
      // START EDT
      String command = e.getActionCommand();  

      if( command.equals( "OK" ))  {
         statusLabel.setText("Ok Button clicked.");
      } else if( command.equals( "Submit" ) )  {
         statusLabel.setText("Submit Button clicked.");
      } else {
         statusLabel.setText("Cancel Button clicked.");
      }     
      // END EDT
   }        
}
Run Code Online (Sandbox Code Playgroud)

在之间的所有代码START EDT,并END EDT在在美国东部时间执行,并且它的任何代码以外的主应用程序线程上执行。同样,另一个示例:

// OUTSIDE EDT
JFrame mainFrame = new JFrame("Java SWING Examples");
mainFrame.setSize(400,400);
mainFrame.setLayout(new GridLayout(3, 1));
mainFrame.addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent …
Run Code Online (Sandbox Code Playgroud)

java swing multithreading event-dispatch-thread java-8

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

Java - 颜色矩形

import java.awt.Graphics;
import javax.swing.JPanel;
import java.awt.Color;
public class DrawPanel extends JPanel {
    public void paintComponent(Graphics g) {
        int height = getHeight();
        int width = getWidth();
        g.drawRect(350, 510, 110, 170);
        g.drawRect(470, 510, 110, 170);
        g.drawRect(590, 510, 110, 170);
        g.drawRect(710, 510, 110, 170);
        g.drawRect(830, 510, 110, 170);
        g.drawRect(350, 30, 110, 170);
        g.drawRect(470, 30, 110, 170);
        g.drawRect(590, 30, 110, 170);
        g.drawRect(710, 30, 110, 170);
        g.drawRect(830, 30, 110, 170);
        g.setColor(Color.RED);
        g.drawRect(110, 450, 110, 170);
        g.drawRect(110, 60, 110, 170);
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要为每个Rectangle(我的意思是在Rectangle内)着色红色,但是使用这个g.setColor(Color.RED); 我只能为Rectanlge的外部部分着色

java swing

-3
推荐指数
1
解决办法
2822
查看次数