Как предотвратить превышение раскрывающегося списка JComboBox размера экрана по вертикали - PullRequest
2 голосов
/ 25 ноября 2011

Я использую JComboBox со многими записями (сотни).Я хочу ограничить размер его раскрывающегося списка вертикальным размером экрана.Использование фиксированного размера не работает должным образом для разных видов и разрешений экрана.

Я использую Java 6u25 в Windows 7.

Если я устанавливаю максимальное количество строк в значение (например, 100), который превышает количество элементов списка (= строк), которые помещаются на экране (75), раскрывающийся список представляется в полном размере, но самые низкие записи никогда не отображаются.

Вот скриншот для иллюстрации (спасибо за SSCCE @trashgod).Scenenshot был сделан на виртуальной машине под XP.

enter image description here

Я также протестировал код на другом ПК, поэтому думаю, что могу исключить некоторые проблемы с драйверами.

Мне нравится иметь выпадающий список, который помещается на экране, где я могу полностью прокрутить до самого последнего значения (и увидеть это значение).С другой стороны, я хотел бы видеть кнопку прокрутки вниз на полосе прокрутки.

Является ли единственная возможность визуализировать ячейку списка и использовать ее в моих вычислениях?Манипуляции с параметрами высоты в выпадающем списке не работали.

Есть идеи, как решить эту проблему?

Что меня озадачивает, так это то, что я не нашел никакой ссылки на эту проблему.Я предполагаю, что я здесь либо упускаю что-то очевидное, либо использую неправильные ключевые слова для поиска.Если какой-либо из последних двух, мои извинения, пожалуйста, дайте мне подсказку.

Спасибо.

Ответы [ 2 ]

7 голосов
/ 26 ноября 2011

Мне трудно в это описание поверить.Можете ли вы подтвердить это SSCCE?

Ваш скептицизм вполне обоснован;мое описание было основано на удаленной памяти удаленной реализации.С sscce ниже я вижу полосу прокрутки и усечение, сообщаемое @uhm;Я могу выбирать из последних, полдюжины скрытых записей только с помощью клавиатуры.Я получаю похожие результаты на этих платформах:

Mac OS X: [Aqua Look and Feel for Mac OS X - com.apple.laf.AquaLookAndFeel]
Ubuntu:   [The Java(tm) Look and Feel - javax.swing.plaf.metal.MetalLookAndFeel]
Windows:  [The Java(tm) Look and Feel - javax.swing.plaf.metal.MetalLookAndFeel]
import java.awt.EventQueue;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;

/** @see http://stackoverflow.com/questions/8270256 */
public class TallCombo extends JPanel {

    private static final int N = 128;

    public TallCombo() {
        final JComboBox combo = new JComboBox();
        for (int i = 0; i < N; i++) {
            combo.addItem("Item " + Integer.valueOf(i));
        }
        combo.setMaximumRowCount(N / 2);
        this.add(combo);
    }

    private void display() {
        JFrame f = new JFrame("TallCombo");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
        System.out.println(UIManager.getLookAndFeel());
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TallCombo().display();
            }
        });
    }
}
0 голосов
/ 25 ноября 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...