// JSplitPane display bug demo
package demo;
class SplitPaneDemo
extends javax.
swing.
JFrame {
private static final Object[][] DEMO_DATA
= {
new Object[] {"Alfa",
150748},
new Object[] {"Bravo",
265984},
new Object[] {"Charlie",
293853},
new Object[] {"Delta",
548932},
};
private static final Object[] CLM_NAMES
= {
"First",
"Second"
};
private javax.
swing.
JTable leftTable
; private javax.
swing.
JTable rightTable
;
public SplitPaneDemo()
{
leftTable
= new javax.
swing.
JTable(DEMO_DATA, CLM_NAMES
); rightTable
= new javax.
swing.
JTable(DEMO_DATA, CLM_NAMES
);
java.
awt.
Container contentPane
= getContentPane
(); contentPane.setLayout(
);
leftScroller.setViewportView(leftTable);
rightScroller.setViewportView(rightTable);
splitter.setLeftComponent(leftScroller);
splitter.setRightComponent(rightScroller);
contentPane.add(splitter);
// Setting the preferred size on the window causes the JSplitPane to mess up the table displays
// Remove the setPreferredSize call and the bug disappears
setPreferredSize
(new java.
awt.
Dimension(550,
400));
pack();
}
public static void main
(String[] args
) {
// Maybe it only fails in "Nimbus" style...
try
{
{
if ("Nimbus".equals(info.getName()))
{
javax.
swing.
UIManager.
setLookAndFeel(info.
getClassName()); break;
}
}
}
{
System.
err.
println(exc.
toString()); }
() ->
{
final SplitPaneDemo window = new SplitPaneDemo();
window.pack();
window.setVisible(true);
}
);
}
}
Ly8gSlNwbGl0UGFuZSBkaXNwbGF5IGJ1ZyBkZW1vCnBhY2thZ2UgZGVtbzsKCmNsYXNzIFNwbGl0UGFuZURlbW8gZXh0ZW5kcyBqYXZheC5zd2luZy5KRnJhbWUKewogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgT2JqZWN0W11bXSBERU1PX0RBVEEgPQogICAgewogICAgICAgIG5ldyBPYmplY3RbXSB7IkFsZmEiLCAgICAgICAxNTA3NDh9LAogICAgICAgIG5ldyBPYmplY3RbXSB7IkJyYXZvIiwgICAgICAyNjU5ODR9LAogICAgICAgIG5ldyBPYmplY3RbXSB7IkNoYXJsaWUiLCAgICAyOTM4NTN9LAogICAgICAgIG5ldyBPYmplY3RbXSB7IkRlbHRhIiwgICAgICA1NDg5MzJ9LAogICAgfTsKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE9iamVjdFtdIENMTV9OQU1FUyA9CiAgICB7CiAgICAgICAgIkZpcnN0IiwKICAgICAgICAiU2Vjb25kIgogICAgfTsKCiAgICBwcml2YXRlIGphdmF4LnN3aW5nLkpTcGxpdFBhbmUgIHNwbGl0dGVyOwogICAgcHJpdmF0ZSBqYXZheC5zd2luZy5KU2Nyb2xsUGFuZSBsZWZ0U2Nyb2xsZXI7CiAgICBwcml2YXRlIGphdmF4LnN3aW5nLkpTY3JvbGxQYW5lIHJpZ2h0U2Nyb2xsZXI7CiAgICBwcml2YXRlIGphdmF4LnN3aW5nLkpUYWJsZSAgICAgIGxlZnRUYWJsZTsKICAgIHByaXZhdGUgamF2YXguc3dpbmcuSlRhYmxlICAgICAgcmlnaHRUYWJsZTsKCiAgICBwdWJsaWMgU3BsaXRQYW5lRGVtbygpCiAgICB7CiAgICAgICAgc3BsaXR0ZXIgICAgICAgID0gbmV3IGphdmF4LnN3aW5nLkpTcGxpdFBhbmUoKTsKICAgICAgICBsZWZ0U2Nyb2xsZXIgICAgPSBuZXcgamF2YXguc3dpbmcuSlNjcm9sbFBhbmUoKTsKICAgICAgICByaWdodFNjcm9sbGVyICAgPSBuZXcgamF2YXguc3dpbmcuSlNjcm9sbFBhbmUoKTsKICAgICAgICBsZWZ0VGFibGUgICAgICAgPSBuZXcgamF2YXguc3dpbmcuSlRhYmxlKERFTU9fREFUQSwgQ0xNX05BTUVTKTsKICAgICAgICByaWdodFRhYmxlICAgICAgPSBuZXcgamF2YXguc3dpbmcuSlRhYmxlKERFTU9fREFUQSwgQ0xNX05BTUVTKTsKCiAgICAgICAgc2V0RGVmYXVsdENsb3NlT3BlcmF0aW9uKGphdmF4LnN3aW5nLldpbmRvd0NvbnN0YW50cy5FWElUX09OX0NMT1NFKTsKICAgICAgICBqYXZhLmF3dC5Db250YWluZXIgY29udGVudFBhbmUgPSBnZXRDb250ZW50UGFuZSgpOwogICAgICAgIGNvbnRlbnRQYW5lLnNldExheW91dCgKICAgICAgICAgICAgbmV3IGphdmF4LnN3aW5nLkJveExheW91dChjb250ZW50UGFuZSwgamF2YXguc3dpbmcuQm94TGF5b3V0LlBBR0VfQVhJUykKICAgICAgICApOwoKICAgICAgICBsZWZ0U2Nyb2xsZXIuc2V0Vmlld3BvcnRWaWV3KGxlZnRUYWJsZSk7CiAgICAgICAgcmlnaHRTY3JvbGxlci5zZXRWaWV3cG9ydFZpZXcocmlnaHRUYWJsZSk7CgogICAgICAgIHNwbGl0dGVyLnNldExlZnRDb21wb25lbnQobGVmdFNjcm9sbGVyKTsKICAgICAgICBzcGxpdHRlci5zZXRSaWdodENvbXBvbmVudChyaWdodFNjcm9sbGVyKTsKCiAgICAgICAgY29udGVudFBhbmUuYWRkKHNwbGl0dGVyKTsKCiAgICAgICAgLy8gU2V0dGluZyB0aGUgcHJlZmVycmVkIHNpemUgb24gdGhlIHdpbmRvdyBjYXVzZXMgdGhlIEpTcGxpdFBhbmUgdG8gbWVzcyB1cCB0aGUgdGFibGUgZGlzcGxheXMKICAgICAgICAvLyBSZW1vdmUgdGhlIHNldFByZWZlcnJlZFNpemUgY2FsbCBhbmQgdGhlIGJ1ZyBkaXNhcHBlYXJzCiAgICAgICAgc2V0UHJlZmVycmVkU2l6ZShuZXcgamF2YS5hd3QuRGltZW5zaW9uKDU1MCwgNDAwKSk7CgogICAgICAgIHBhY2soKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgewogICAgICAgIC8vIE1heWJlIGl0IG9ubHkgZmFpbHMgaW4gIk5pbWJ1cyIgc3R5bGUuLi4KICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoamF2YXguc3dpbmcuVUlNYW5hZ2VyLkxvb2tBbmRGZWVsSW5mbyBpbmZvIDogamF2YXguc3dpbmcuVUlNYW5hZ2VyLmdldEluc3RhbGxlZExvb2tBbmRGZWVscygpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoIk5pbWJ1cyIuZXF1YWxzKGluZm8uZ2V0TmFtZSgpKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBqYXZheC5zd2luZy5VSU1hbmFnZXIuc2V0TG9va0FuZEZlZWwoaW5mby5nZXRDbGFzc05hbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleGMpCiAgICAgICAgewogICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oZXhjLnRvU3RyaW5nKCkpOwogICAgICAgIH0KCiAgICAgICAgamF2YS5hd3QuRXZlbnRRdWV1ZS5pbnZva2VMYXRlcigKICAgICAgICAgICAgKCkgLT4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZmluYWwgU3BsaXRQYW5lRGVtbyB3aW5kb3cgPSBuZXcgU3BsaXRQYW5lRGVtbygpOwogICAgICAgICAgICAgICAgd2luZG93LnBhY2soKTsKICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRWaXNpYmxlKHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KfQo=