Код: Выделить всё
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
public class TestTabs
{
public static void main(String[] args) throws Exception
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
JFrame jfrey = new JFrame("Test");
JTabbedPane jt = new JTabbedPane();
jt.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
for (int i = 0; i < 10; i++)
{
jt.addTab("Testing tabs" + i, new JPanel());
}
jfrey.getContentPane().add(jt);
jfrey.setMinimumSize(new Dimension(640, 480));
jfrey.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jfrey.setLocationRelativeTo(null);
SwingUtilities.invokeLater(() -> jfrey.setVisible(true));
}
}

Похоже, это происходит в Windows L&F для меня это система L&F. Если я пропущу вызов UIManager, они, похоже, не будут перемещаться.
Есть ли способ обойти это поведение в Windows L&F?
РЕДАКТИРОВАТЬ:
Вот еще одна версия, которая гарантирует, что каждая вкладка действительно добавляется в EDT:Код: Выделить всё
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.invokeLater(() -> {
JFrame jfrey = new JFrame("Test");
JTabbedPane jt = new JTabbedPane();
jt.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
JPanel jeep = new JPanel();
JButton addTab = new JButton("Add new tab");
JButton removeTab = new JButton("Remove new tab");
addTab.addActionListener(al -> jt.addTab("Testing tabs" + jt.getTabCount(), new JPanel()));
removeTab.addActionListener(al -> jt.removeTabAt(jt.getTabCount() - 1));
jeep.add(addTab);
jeep.add(removeTab);
jfrey.getContentPane().add(jeep, BorderLayout.NORTH);
jfrey.getContentPane().add(jt);
jfrey.setMinimumSize(new Dimension(640, 480));
jfrey.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jfrey.setLocationRelativeTo(null);
jfrey.setVisible(true);
});
Подробнее здесь: https://stackoverflow.com/questions/798 ... windows-lf
Мобильная версия