Swing/_Bug のバックアップ差分(No.12)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/_Bug へ行く。
- 1 (2018-01-22 (月) 16:28:08)
- 2 (2018-01-22 (月) 18:20:55)
- 3 (2018-02-15 (木) 14:23:42)
- 4 (2018-02-26 (月) 19:27:56)
- 5 (2018-03-06 (火) 20:30:25)
- 6 (2018-03-09 (金) 13:35:24)
- 7 (2018-03-12 (月) 22:00:01)
- 8 (2018-03-20 (火) 20:41:06)
- 9 (2018-04-18 (水) 16:05:30)
- 10 (2018-04-18 (水) 20:58:05)
- 11 (2018-12-04 (火) 15:00:10)
- 12 (2018-12-10 (月) 16:53:30)
- 13 (2019-05-28 (火) 16:46:59)
- 14 (2019-05-29 (水) 18:42:42)
- 15 (2019-05-30 (木) 14:28:49)
- 16 (2019-06-18 (火) 19:13:57)
- 17 (2019-07-30 (火) 22:08:07)
- 18 (2019-12-21 (土) 02:32:09)
- 19 (2022-02-10 (木) 12:46:56)
- 20 (2022-08-20 (土) 22:15:25)
- 21 (2022-10-01 (土) 05:05:19)
- 追加された行はこの色です。
- 削除された行はこの色です。
--- title: Swing Bug title: Swing Bugs keywords: [Java, Swing] description: Swing関連で注目しているバグIDへのリンク、メモなど author: aterai pubdate: 2018-01-22 --- * 概要 [#summary] [[Swing]]関係で個人的に注目しているバグ`ID`へのリンクなどをメモしています。 #contents * 未修正 [#NotFixedYet] ** 右Altキーが効かない [#g57772eb] - [https://bugs.openjdk.java.net/browse/JDK-8194873 JDK-8194873 right ALT key hotkeys no longer work in Swing components - Java Bug System] -- `Java 9`で右KBD{Alt}キーが効かなくなっている -- `Java 8`は問題なし ** MetalLookAndFeelでのJComboBoxとJToolTip [#fc4b2abf] - ドロップダウンリストを開いた状態でツールチップが表示されると描画がおかしくなる場合がある -- `MetalLookAndFeel`のみ -- ドロップダウンリストが`HeavyWeightWindow`か`LightWeightWindow`かは無関係 - [[JComboBoxの各アイテムやArrowButtonにそれぞれToolTipTextを設定する>Swing/ToolTipInComboBox]]にソースコードは移動 #img2(https://drive.google.com/uc?id=1l662LOjb0AFVh6F9lOSm78ZsXzJfuG0GDQ) ** JToolBarに配置したJButtonのフォーカス描画 [#w21ce2da] - [https://stackoverflow.com/questions/37295099/decorating-a-rollover-toolbar-button-with-jlayer-paints-its-border#37295921 java - Decorating a rollover toolbar button with JLayer paints its border - Stack Overflow] -- `JButton`を`JLayer`でラップして`JToolBar`に追加すると、`JToolBar`用のフォーカス描画ではなく、デフォルトのフォーカス描画が適用されてしまう -- 回答されているように、`BasicToolBarUI#setBorderToRollover(...)`などが、`JLayer`を想定していない -- [[JLayerで隣接する別コンポーネント上に縁を描画>Swing/OverlapBorderPaintLayer]]のように、親の`JToolBar`に`JLayer`を設定し、`e.getComponent()`で`JButton`を取得して回避可能 ** NimbusLookAndFeelでのJComboBoxの推奨サイズ [#x115b70b] - [https://stackoverflow.com/questions/36274053/swing-jcombobox-bug-printing-dimension java - Swing (JComboBox) bug? printing dimension - Stack Overflow] -- `JComboBox`の時点と、`JFrame`に追加して`JFrame#pack()`もしくは`JFrame.setSize(...)`後で、`JComboBox`の推奨サイズ(幅)が異なる? -- `NimbusLookAndFeel`のみの現象? -- `setEditable(true)`にすると高さが異なる... - `JComboBox#getPreferredSize()`を呼ぶと項目の文字列長を検索して、`cachedMinimumSize`にサイズがキャッシュされる - `ArrowButton`の幅がデフォルト`16`と`JComboBox`用は`19`と異なる - `SynthArrowButton#getPreferredSize(JComponent)`で、`context.getStyle().getInt(context, "ArrowButton.size", 16);`が呼ばれている #code{{ import java.awt.*; import javax.swing.*; public class NimbusComboBoxSizeTest { public JComponent makeUI() { String[] model = {"Average"}; JPanel p0 = new JPanel(); JComboBox<String> combo0 = new JComboBox<>(model); p0.add(combo0); JPanel p1 = new JPanel(); JComboBox<String> combo1 = new JComboBox<>(model); p1.add(combo1); Box box = Box.createVerticalBox(); box.add(p0); box.add(p1); EventQueue.invokeLater(() -> System.out.println("combo0: " + combo0.getPreferredSize())); System.out.println("combo1: " + combo1.getPreferredSize()); JPanel p = new JPanel(new BorderLayout()); p.add(box, BorderLayout.NORTH); return p; } public static void main(String[] args) { EventQueue.invokeLater(() -> createAndShowGUI()); } public static void createAndShowGUI() { try { for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(laf.getName())) { UIManager.setLookAndFeel(laf.getClassName()); UIDefaults d = UIManager.getLookAndFeelDefaults(); System.out.println("ArrowButton.size: " + d.getInt("ArrowButton.size")); System.out.println("ComboBox.arrowButton.size: " + d.getInt("ComboBox:\"ComboBox.arrowButton\".size")); //どちらかのコメントを外して値を揃えてやると、以下の現象は修正される? //d.put("ComboBox:\"ComboBox.arrowButton\".size", 16); //d.put("ArrowButton.size", 19); } } } catch (Exception ex) { ex.printStackTrace(); } JFrame f = new JFrame(); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.getContentPane().add(new NimbusComboBoxSizeTest().makeUI()); f.setSize(320, 240); f.setLocationRelativeTo(null); f.setVisible(true); } } }} ** 高解像度でJOptionPaneのアイコンが欠ける [#vfc496a6] - [https://stackoverflow.com/questions/30774828/bad-swing-ui-scaling-on-high-resolution-ms-surface java - Bad Swing UI scaling on high resolution (MS Surface) - Stack Overflow] -- `Surface Pro 3`でテキスト文字サイズを`150%`に設定し、`JOptionPane`を`WindowsLookAndFeel`で表示すると、アイコンが欠けるバグ? -- 以下のように`OptionPane.minimumSize`を設定しても解消しない -- レイアウトでおかしくなっているのではなく、取得するアイコン自体が欠けている? #code{{ import java.awt.*; import javax.swing.*; public class OptionPaneResolutionTest { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { createAndShowGUI(); } }); } public static void createAndShowGUI() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } Dimension defaultSize = UIManager.getDimension("OptionPane.minimumSize"); System.out.println("OptionPane.minimumSize default: " + defaultSize); int sr = Toolkit.getDefaultToolkit().getScreenResolution(); float dpi = System.getProperty("os.name").startsWith("Windows") ? 96f : 72f; float sot = sr / dpi; System.out.format("%d%%%n", (int)(sot * 100)); Dimension mind = new Dimension((int)(defaultSize.width * sot), (int)(defaultSize.height * sot)); System.out.println("OptionPane.minimumSize: " + mind); UIManager.put("OptionPane.minimumSize", mind); JOptionPane.showMessageDialog(null, "msg", "Information", JOptionPane.INFORMATION_MESSAGE); } } }} ** 高解像度でIMEの候補表示位置がずれる [#o7e09fe6] - [https://bugs.openjdk.java.net/browse/JDK-8189687 JDK-8189687 Swing: Invalid position of candidate pop-up of InputMethod in Hi-DPI on Windows - Java Bug System] * 修正済み [#Fixed] ** Application uses higher CPU in 8u161/8u162 [#md4c2938] - [https://bugs.openjdk.java.net/browse/JDK-8195830 JDK-8195830 Application uses higher CPU in 8u161/8u162 - Java Bug System] -- via: [https://stackoverflow.com/questions/48339199/java-8u161-8u162-makes-swing-app-use-cpu Java 8u161/8u162 makes Swing app use CPU - Stack Overflow] -- 例えば`JTextField`などに日本語を入力しようとして`IME`を切り替えると`CPU`を浪費する - `Java 10`での修正が`8u172`にもバックポートされた -- [https://bugs.openjdk.java.net/browse/JDK-8183504 JDK-8183504 8u131 Win 10, issue with wrong position of Sogou IME popup - Java Bug System] -- [https://bugs.openjdk.java.net/browse/JDK-8191889 JDK-8191889 8u131 Win 10, issue with wrong position of Sogou IME popup - Java Bug System] ** 親フレームのドラッグ中にJWindowでクラッシュ [#hed7be2e] - [https://stackoverflow.com/questions/30072883/java-swing-jwindow-application-crash Java Swing JWindow application crash - Stack Overflow] -- 親フレームのドラッグ中に?子`JWindow`が表示されると`JVM`が落ちる(`Windows 7 64bit JKD1.8.0_11`)。 --[https://bugs.openjdk.java.net/browse/JDK-8079595?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel JDK-8079595 Resizing dialog which is JWindow parent makes JVM crash - Java Bug System] -- [http://hg.openjdk.java.net/jdk9/client/jdk/rev/b5125fa7ef4b jdk9/client/jdk: b5125fa7ef4b] 修正された模様 #code{{ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Main2 { private static Robot robot; public static void main(String... args) throws Exception { robot = new Robot(); robot.setAutoDelay(100); EventQueue.invokeLater(new Runnable() { @Override public void run() { createAndShowGUI(); } }); EventQueue.invokeAndWait(new Runnable() { @Override public void run() { Point pt = new Point(50, 10); robot.mouseMove(pt.x, pt.y); robot.mousePress(InputEvent.BUTTON1_MASK); pt.translate(50, 50); robot.mouseMove(pt.x, pt.y); //robot.mouseRelease(InputEvent.BUTTON1_MASK); } }); } public static void createAndShowGUI() { final JFrame f = new JFrame(); f.add(new JLabel("Try JFrame draging 2sec")); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.setSize(320, 240); f.setVisible(true); final JWindow w = new JWindow(f); w.add(new JButton("button")); w.pack(); Timer t = new Timer(2000, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { w.setVisible(true); } }); t.setRepeats(false); t.start(); } } }} ** TimSortでレイアウトをソート中に例外発生 [#decaf774] - [https://stackoverflow.com/questions/16547365/swing-gui-flickering-white-error java - swing gui flickering white error - Stack Overflow]のサンプルを試していたら面白い挙動に遭遇。 -- `JDK1.8.0_40`で(以前のソートを使用するように)修正された -- [https://bugs.openjdk.java.net/browse/JDK-8048887 JDK-8048887 SortingFocusTraversalPolicy throws IllegalArgumentException from the sort method] - `JDK1.7.0_21` -- IllegalArgumentException: Comparison method violates its general contract! Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Comparison method violates its general contract! at java.util.TimSort.mergeLo(TimSort.java:747) at java.util.TimSort.mergeAt(TimSort.java:483) at java.util.TimSort.mergeCollapse(TimSort.java:410) at java.util.TimSort.sort(TimSort.java:214) at java.util.TimSort.sort(TimSort.java:173) at java.util.Arrays.sort(Arrays.java:659) at java.util.Collections.sort(Collections.java:217) -- フレームのリサイズで上下左右に余白? - `JDK1.6.0_41` -- フレームのリサイズで右と下に余白? #code{{ import java.awt.*; import javax.swing.*; public class Gui { public JComponent makeUI() { JPanel p = new JPanel(new GridLayout(22,12,10,10)); p.setBackground(Color.WHITE); p.setBorder(BorderFactory.createLineBorder(Color.BLUE, 10)); for (int i = 0; i < 22; i++) { for (int j = 0; j < 12; j++) { JLabel label = new JLabel(); label.setBorder(BorderFactory.createLineBorder(Color.RED)); label.setBackground(Color.GRAY); label.setOpaque(true); //label.setPreferredSize(new Dimension(50, 50)); p.add(label); } } return p; } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { createAndShowGUI(); } }); } public static void createAndShowGUI() { JFrame f = new JFrame(); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.getContentPane().add(new Gui().makeUI()); f.setSize(320, 240); //f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } } }} * 再現不可 [#CannotReproduce] ** WebStartでCPU 100% [#p32896ec] -`1.6.0_14`にすると、`web start`(`2`回目以降?) で`CPU 100%`になる? --自宅のPCでは再現しない。 - [https://community.oracle.com/thread/1305835 Java Web Start & JNLP - BouncyCastle via Java Web Start 1.6.0_14] - [https://community.oracle.com/thread/1306088 Java Web Start & JNLP - Upgrade to 1.6.0_14 causing Webstart launched application to fail] -`JTableHeader` + `KeyEvent.VK_SPACE` `Windows XP`(日本語?)+`JDK 1.6.0_17`では、KBD{F8}キーで`JTableHeader`にフォーカスを移動して、KBD{SPACE}キーを押してもソートされない? 以下のように設定しても、`KeyEvent.VK_SPACE`はうまくいかない。`KeyEvent.VK_F9`とかなら大丈夫。 #code{{ InputMap im = table.getTableHeader().getInputMap( JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); im.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0), "toggleSortOrder"); }} - 再現しなくなった // キーボードが壊れたのかもと思ったけど、`JDK 1.7.0`では、問題なく動作している?。暇なときに、`Bug Database`を調べること。追記:`IME`を変更したら再現しなくなった…。 * 参考リンク [#reference] - [https://bugs.openjdk.java.net/browse/JDK-6723524 Bug ID: 6723524 Invalid background of components displayed in JTable in Nimbus L&F] - Release Fixed: 1.7.0 %%[https://bugs.openjdk.java.net/browse/JDK-6910490 Bug ID: 6910490 MatteBorder JScrollpane interaction]%% - [https://bugs.openjdk.java.net/browse/JDK-6612928 Bug ID: 6612928 Win32ShellFolder2 throws RejectedExecutionException on application exit] - [https://bugs.openjdk.java.net/browse/JDK-4280944 Bug ID: 4280944 Attributes on last newline character cause undesirable extra spacing.] - [https://bugs.openjdk.java.net/browse/JDK-6780505 Bug ID: 6780505 java.awt.Desktop.getDesktop().open() fails on shared files with white spaces] - [https://bugs.openjdk.java.net/browse/JDK-4777210 Bug ID: 4777210 setText causes deadlock in JFormattedTextField, JTextComponent] - [https://bugs.openjdk.java.net/browse/JDK-6937538 Bug ID: 6937538 Nimbus: JInternalFrame() causes exception if user UI installed] - Release Fixed: 1.4.0 %%[https://bugs.openjdk.java.net/browse/JDK-4463424 Bug ID: 4463424 LineBreakMeasurer inconsistent with TextLayout]%% - [https://bugs.openjdk.java.net/browse/JDK-6700748 Bug ID: 6700748 Cursor flickering during D&D when using CellRendererPane with validation] - [https://bugs.openjdk.java.net/browse/JDK-6723524 Bug ID: 6723524 Invalid background of components displayed in JTable in Nimbus L&F] - [https://bugs.openjdk.java.net/browse/JDK-4292511 Bug ID: 4292511 JTableHeader height determined by first column given HTML text] - [https://bugs.openjdk.java.net/browse/JDK-6826514 Bug ID: 6826514 SwingWorker: done() called before doInBackground() returns, when cancelled] - [https://bugs.openjdk.java.net/browse/JDK-6413228 Bug ID: 6413228 Many links broken with "?is-external=true".] - [https://bugs.openjdk.java.net/browse/JDK-4908277 Bug ID: 4908277 Animated GIF does not play inside JTable, customized TableCellRenderer] - Release Fixed: 1.7.0, 1.6.0_18 %%[https://bugs.openjdk.java.net/browse/JDK-4833524 Bug ID: 4833524 BasicTreeUI.isToggleSelectionEvent() does not properly handle popup triggers]%% - Release Fixed: 1.7.0, 1.6.0_18 %%[https://bugs.openjdk.java.net/browse/JDK-6840086 Bug ID: 6840086 JFileChooser lacks icons on top right when running on Windows 7]%% - [https://bugs.openjdk.java.net/browse/JDK-4765261 Bug ID: 4765261 JTextArea.append does not follow spec (it is not ThreadSafe)] - [https://bugs.openjdk.java.net/browse/JDK-4760477 Bug ID: 4760477 JTextArea.append(String) is not ThreadSafe] - Release Fixed: 1.7.0 %%[https://bugs.openjdk.java.net/browse/JDK-4765383 Bug ID: 4765383 JTextArea.append(String) not thread safe]%% - [https://bugs.openjdk.java.net/browse/JDK-7140863 Bug ID: 7140863 Lots of Japanese OpenType fonts do not render correctly] - [https://bugs.openjdk.java.net/browse/JDK-5036549 Bug ID: JDK-5036549 PopupMenu not adjusting its location correctly depending on taskbar's position.] ** 未修整、重複? [#w96f7a6e] - [https://bugs.openjdk.java.net/browse/JDK-6723524 JDK-6723524 Invalid background of components displayed in JTable in Nimbus L&F] - [https://bugs.openjdk.java.net/browse/JDK-6612928 JDK-6612928 Win32ShellFolder2 throws RejectedExecutionException on application exit] - [https://bugs.openjdk.java.net/browse/JDK-4280944 JDK-4280944 Attributes on last newline character cause undesirable extra spacing.] - [https://bugs.openjdk.java.net/browse/JDK-6780505 JDK-6780505 java.awt.Desktop.getDesktop().open() fails on shared files with white spaces] - [https://bugs.openjdk.java.net/browse/JDK-4777210 JDK-4777210 setText causes deadlock in JFormattedTextField, JTextComponent] - [https://bugs.openjdk.java.net/browse/JDK-6937538 JDK-6937538 Nimbus: JInternalFrame() causes exception if user UI installed] - [https://bugs.openjdk.java.net/browse/JDK-6700748 JDK-6700748 Cursor flickering during D&D when using CellRendererPane with validation] - [https://bugs.openjdk.java.net/browse/JDK-6723524 JDK-6723524 Invalid background of components displayed in JTable in Nimbus L&F] - [https://bugs.openjdk.java.net/browse/JDK-4292511 JDK-4292511 JTableHeader height determined by first column given HTML text] - [https://bugs.openjdk.java.net/browse/JDK-6826514 JDK-6826514 SwingWorker: done() called before doInBackground() returns, when cancelled] - [https://bugs.openjdk.java.net/browse/JDK-4908277 JDK-4908277 Animated GIF does not play inside JTable, customized TableCellRenderer] - [https://bugs.openjdk.java.net/browse/JDK-4765261 JDK-4765261 JTextArea.append does not follow spec (it is not ThreadSafe)] - [https://bugs.openjdk.java.net/browse/JDK-4760477 JDK-4760477 JTextArea.append(String) is not ThreadSafe] - [https://bugs.openjdk.java.net/browse/JDK-7140863 JDK-7140863 Lots of Japanese OpenType fonts do not render correctly] - [https://bugs.openjdk.java.net/browse/JDK-5036549 JDK-5036549 PopupMenu not adjusting its location correctly depending on taskbar's position.] - [https://bugs.openjdk.java.net/browse/JDK-6603771 JDK-6603771 Nimbus L&F: Ctrl+F7 keybinding for JInternal Frame throws a NPE. - Java Bug System] ** 修正済み [#f5441365] - Release Fixed: 1.4.0 %%[https://bugs.openjdk.java.net/browse/JDK-4463424 JDK-4463424 LineBreakMeasurer inconsistent with TextLayout]%% - Release Fixed: 1.6.0 %%[https://bugs.openjdk.java.net/browse/JDK-6413228 JDK-6413228 Many links broken with "?is-external=true".]%% - Release Fixed: 1.7.0 %%[https://bugs.openjdk.java.net/browse/JDK-6910490 JDK-6910490 MatteBorder JScrollpane interaction]%% - Release Fixed: 1.7.0 %%[https://bugs.openjdk.java.net/browse/JDK-4765383 JDK-4765383 JTextArea.append(String) not thread safe]%% - Release Fixed: 1.7.0, 1.6.0_18 %%[https://bugs.openjdk.java.net/browse/JDK-4833524 JDK-4833524 BasicTreeUI.isToggleSelectionEvent() does not properly handle popup triggers]%% - Release Fixed: 1.7.0, 1.6.0_18 %%[https://bugs.openjdk.java.net/browse/JDK-6840086 JDK-6840086 JFileChooser lacks icons on top right when running on Windows 7]%% * コメント [#comment] #comment #comment