Swing Bugs
Total: 6511
, Today: 2
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
Swing関係で個人的に注目しているバグID
へのリンクなどをメモしています。
未修正
ComponentOrientation.RIGHT_TO_LEFTが設定されたJMenuBarの矢印キーによるフォーカス移動がおかしい
- java - JMenuBar arrow keys work the opposite of what expected because componentOrientation is set to Right to Left - Stack Overflow
- [JDK-8277369] Strange behavior of JMenuBar with RIGHT_TO_LEFT orientation, arrow keys behaves opposite traversing through keyboard - Java Bug System
- 8277369: Strange behavior of JMenuBar with RIGHT_TO_LEFT orientation, arrow keys behaves opposite traversing through keyboard by prsadhuk · Pull Request #7396 · openjdk/jdkで修正される
JToolBarに配置したJButtonのフォーカス描画
- java - Decorating a rollover toolbar button with JLayer paints its border - Stack Overflow
JButton
をJLayer
でラップしてJToolBar
に追加すると、JToolBar
用のフォーカス描画ではなく、デフォルトのフォーカス描画が適用されてしまう- 回答されているように、
BasicToolBarUI#setBorderToRollover(...)
などが、JLayer
を想定していない - JLayerで隣接する別コンポーネント上に縁を描画のように、親の
JToolBar
にJLayer
を設定し、e.getComponent()
でJButton
を取得して回避可能
NimbusLookAndFeelでのJComboBoxの推奨サイズ
- 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);
が呼ばれている
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のアイコンが欠ける
- java - Bad Swing UI scaling on high resolution (MS Surface) - Stack Overflow
Surface Pro 3
でテキスト文字サイズを150%
に設定し、JOptionPane
をWindowsLookAndFeel
で表示すると、アイコンが欠けるバグ?- 以下のように
OptionPane.minimumSize
を設定しても解消しない - レイアウトでおかしくなっているのではなく、取得するアイコン自体が欠けている?
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);
}
}
MetalLookAndFeelでのJComboBoxとJToolTip
- ドロップダウンリストを開いた状態でツールチップが表示されると描画がおかしくなる場合がある
MetalLookAndFeel
のみ- ドロップダウンリストが
HeavyWeightWindow
かLightWeightWindow
かは無関係
- JComboBoxの各アイテムやArrowButtonにそれぞれToolTipTextを設定するにソースコードは移動
修正済み
1.8.0_212 からImageView#setLoadsSynchronously(...)の設定で画像がJEditorPaneに表示されない
JDK 11.0.2
、JDK 8.0.202
からImageView
にsetLoadsSynchronously(true)
を設定すると画像が表示されなくなってしまったJDK 11.0.1
、JDK 8.0.202
では正常に画像が表示されるJDK 8.0.222
では修正されている- [JDK-8208638] Instead of circle rendered in appl window, but ellipse is produced JEditor Pane - Java Bug Systemのリグレッション?
OpenJDK Corretto 1.8.0_212 で図形の描画が崩壊する
Corretto 1.8.0_212
(Windows 10
環境)でソフトクリッピング効果を使用すると描画がおかしくなる?openjdk version "1.8.0_212" OpenJDK Runtime Environment Corretto-8.212.04.2 (build 1.8.0_212-b04) OpenJDK 64-Bit Server VM Corretto-8.212.04.2 (build 25.212-b04, mixed mode)
Java 2Dテクノロジのシステム・プロパティなどを変更して調査しているがまだ原因不明- 切り抜き図形の幅を
32
の倍数以外にすると発生しない(高さは無関係?) - 上記スクリーンショットの抜け部分のサイズは
32px
- Java2D rendering may break when using soft clipping effects · Issue #127 · corretto/corretto-8、
8u222
で修正済みされる予定
- 切り抜き図形の幅を
- [JDK-8225065] Revert 8221166 (8u backport of 8048782) - Java Bug Systemのリバートで
OpenJDK
でも8u222
で修正済みされる模様8u222
で修正される予定だったBackport JDK-8048782: OpenJDK: PiscesCache : xmax/ymax rounding up can cause RasterFormatException by sci-aws · Pull Request #94 · corretto/corretto-8の修正がcorretto-8
では8u212
に紛れ込んでいた?ということなのかも???
Corretto 11.0.3
では正常openjdk version "11.0.3" 2019-04-16 LTS OpenJDK Runtime Environment Corretto-11.0.3.7.1 (build 11.0.3+7-LTS) OpenJDK 64-Bit Server VM Corretto-11.0.3.7.1 (build 11.0.3+7-LTS, mixed mode)
AdoptOpenJDK 1.8.0_212
では正常openjdk version "1.8.0_212" OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_212-b03) OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.212-b03, mixed mode)
右Altキーが効かない
- JDK-8194873 right ALT key hotkeys no longer work in Swing components - Java Bug System
Java 9
で右Altキーが効かなくなっているJava 8
は問題なしJava 11
で修正済み
高解像度でIMEの候補表示位置がずれる
- JDK-8189687 Swing: Invalid position of candidate pop-up of InputMethod in Hi-DPI on Windows - Java Bug System
Java 11
で修正済み
Application uses higher CPU in 8u161/8u162
- JDK-8195830 Application uses higher CPU in 8u161/8u162 - Java Bug System
- via: Java 8u161/8u162 makes Swing app use CPU - Stack Overflow
- 例えば
JTextField
などに日本語を入力しようとしてIME
を切り替えるとCPU
を浪費する
Java 10
での修正が8u172
にもバックポートされた
親フレームのドラッグ中にJWindowでクラッシュ
- Java Swing JWindow application crash - Stack Overflow
- 親フレームのドラッグ中に?子
JWindow
が表示されるとJVM
が落ちる(Windows 7 64bit JKD1.8.0_11
)。 - JDK-8079595 Resizing dialog which is JWindow parent makes JVM crash - Java Bug System
- jdk9 changeset 12899:b5125fa7ef4b 8079595: Resizing dialog which is JWindow parent makes JVM crash 修正された模様
- 親フレームのドラッグ中に?子
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でレイアウトをソート中に例外発生
- java - swing gui flickering white error - Stack Overflowのサンプルを試していたら面白い挙動に遭遇。
JDK1.8.0_40
で(以前のソートを使用するように)修正された- 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)
- フレームのリサイズで上下左右に余白?
- IllegalArgumentException: Comparison method violates its general contract!
JDK1.6.0_41
- フレームのリサイズで右と下に余白?
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);
}
}
参考リンク
未修正
- [JDK-4280944] Attributes on last newline character cause undesirable extra spacing. - Java Bug System
- [JDK-4292511] JTableHeader height determined by first column given HTML text - Java Bug System
- [JDK-4765261] JTextArea.append does not follow spec (it is not ThreadSafe) - Java Bug System
- [JDK-5036549] PopupMenu not adjusting its location correctly depending on taskbar's position. - Java Bug System
- [JDK-6603771] Nimbus L&F: Ctrl+F7 keybinding for JInternal Frame throws a NPE. - Java Bug System
- [JDK-6612928] Win32ShellFolder2 throws RejectedExecutionException on application exit - Java Bug System
- [JDK-6700748] Cursor flickering during D&D when using CellRendererPane with validation - Java Bug System
- [JDK-6723524] Invalid background of components displayed in JTable in Nimbus L&F - Java Bug System
- [JDK-6723524] Invalid background of components displayed in JTable in Nimbus L&F - Java Bug System
- [JDK-6780505] java.awt.Desktop.getDesktop().open() fails on shared files with white spaces - Java Bug System
- [JDK-6826514] SwingWorker: done() called before doInBackground() returns, when cancelled - Java Bug System
修正済み
- Release Fixed: 1.4.0
[JDK-4463424] LineBreakMeasurer inconsistent with TextLayout - Java Bug System - Release Fixed: 1.6.0
[JDK-6413228] Many links broken with "?is-external=true". - Java Bug System - Release Fixed: 1.7.0
[JDK-6910490] MatteBorder JScrollpane interaction - Java Bug System - Release Fixed: 1.7.0
[JDK-4765383] JTextArea.append(String) not thread safe - Java Bug System - Release Fixed: 1.7.0, 1.6.0_18
[JDK-4833524] BasicTreeUI.isToggleSelectionEvent() does not properly handle popup triggers - Java Bug System - Release Fixed: 1.7.0, 1.6.0_18
[JDK-6840086] JFileChooser lacks icons on top right when running on Windows 7 - Java Bug System - Release Fixed: 1.6.0_21
[JDK-6631956] Nimbus: ClassCastException when running with MultiLookAndFeel - Java Bug System - 修正されているようだがクローズされていない
[JDK-7140863] Lots of Japanese OpenType fonts do not render correctly - Java Bug System