Вкладки в JTabbedPane перемещаются сами по себе в окнах L&F.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Вкладки в JTabbedPane перемещаются сами по себе в окнах L&F.

Сообщение Anonymous »

У меня есть следующая программа на Java 8:

Код: Выделить всё

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);
});
Здесь после удаления последней вкладки L&F по умолчанию не выдает ошибку так же, как в Windows


Подробнее здесь: https://stackoverflow.com/questions/798 ... windows-lf
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»