2015-09-30 3 views
3

У меня проблема, которая возникает только на Nimbus L & F. Если в JList слишком много элементов, большой палец JScrollBar исчезнет. Но в металле L & F большой палец будет всегда виден, потому что он имеет минимальный размер. Я также проверил логику в Nimbus L & F, там есть такой же минимальный размер. Но это не было сделано.JScrollBar не показывает большой палец в Nimbus L & F

Пожалуйста, смотрите мой код ниже:

public static void main(String[] args) { 
    for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { 
     if ("Nimbus".equals(info.getName())) { 
      try { 
       UIManager.setLookAndFeel(info.getClassName()); 
      } catch (ClassNotFoundException ex) { 
       Logger.getLogger(Demo.class.getName()).log(Level.SEVERE, null, ex); 
      } catch (InstantiationException ex) { 
       Logger.getLogger(Demo.class.getName()).log(Level.SEVERE, null, ex); 
      } catch (IllegalAccessException ex) { 
       Logger.getLogger(Demo.class.getName()).log(Level.SEVERE, null, ex); 
      } catch (UnsupportedLookAndFeelException ex) { 
       Logger.getLogger(Demo.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      break; 
     } 
    } 

    JFrame f = new JFrame("Metal (height 300)"); 

    String[] ss = new String[100]; 
    for (int i = 0; i < ss.length; i++) { 
     ss[i] = "" + i; 
    } 

    JList<String> l = new JList<String>(); 
    l.setListData(ss); 

    final JScrollPane jScrollPane = new JScrollPane(l); 
    f.getContentPane().add(jScrollPane); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.setSize(300, 300); 
    f.setVisible(true); 
} 

Когда я установил "f.setSize (300, 300);", большой палец исчезнет.

enter image description here

Но если установить "f.setSize (300, 400);", то большой палец будет виден.

enter image description here

Как я могу установить большой палец всегда виден?

enter image description here

+0

Кажется, хорошо для меня. Какую версию Java вы используете? Вы пытались инициализировать пользовательский интерфейс из контекста EDT ([Начальные потоки] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html))? У вас есть скриншот из двух экранов? – MadProgrammer

+0

Я использую 1.8.0_60. См. Следующий скриншот http://7xlpns.com1.z0.glb.clouddn.com/Nimbus%20300.png, http://7xlpns.com1.z0.glb.clouddn.com/Nimbus%20400.png, http : //7xlpns.com1.z0.glb.clouddn.com/Metal%20300.png – Alan

+0

Я попытался запустить эту демонстрацию в потоке EDT, проблема существует. Благодаря! – Alan

ответ

2

Попробуйте установить минимальный размер большого пальца до 1

getDefaults().put("ScrollBar.minimumThumbSize", new Dimension(29, 1)); 
+0

Спасибо, это работает. Я устанавливаю 'новое измерение (29, 29)' вместо 'new Dimension (29, 1)', чтобы сделать большой палец большим. – Alan

+0

Я попробовал его со столом со множеством строк. –

+1

Игнорировать первый комментарий, я должен был просто замедлить ход. 'new Dimension (29,29)' - размер по умолчанию большого пальца (смотрите [здесь] (https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/_nimbusDefaults.html)). Я попробовал его установить этот размер тоже, но большой палец продолжает исчезать после того, как я добавлю много новых данных в свою тестовую таблицу. Наверное, потому что он не может «сжиматься» java, я не знаю. Но это сработало для меня, когда я установил высоту до 1. –

2

Вы должны попробовать это:

UIManager.getLookAndFeelDefaults().put("ScrollBar.minimumThumbSize", new Dimension(30, 30)); 
Смежные вопросы