Заставьте JScrollPane отобразить полосы прокрутки, когда JList внутри будет изменен

К сожалению, ваш метод может решить только каждый второй байт правильно, не знаю почему: D Я протестировал его с этим байтовым массивом с start = 12 и end = 48.

байт [] s = {(байт) 0b01000000, (байт) 0b00000000, (байт) 0b00010011, (байт) 0b00010000, (байт) 0b11101100, (байт) 0b00010001, (байт) 0b11101100 (байт) 0b0001 byte) 0b11101100, (byte) 0b00010001}

Результат был таким:

00000001 00110001 11111110 < - это не работает 11000001 00001110

Я нашел другое решение с BigInteger, использующим rightShift и leftShift, до тех пор, пока эти биты не окажутся в правильном положении, чтобы прочитать его непосредственно из байтового массива. Спасибо за вашу помощь!

5
задан VolkA 3 May 2009 в 22:20
поделиться

4 ответа

, если предпочтительный размер установлен в JList, даже если (0, 0), тогда JScrollPane не работает - убедитесь, что он не установлен, при необходимости setPreferredSize (null)

см. mrtextminer следующим образом

Решение этой проблемы состоит в том, чтобы не устанавливать предпочитаемый размер JList (удаление оператора настройки). В Netbeans IDE 5.5.1 отмена настройки предпочтительного размера для JList может быть достигнута, щелкнув правой кнопкой мыши свойство предпочтительного размера JList и затем выбрав «восстановление значения по умолчанию».

В заключение, установите предпочтительный размер только для JScrollPane. Не устанавливайте предпочитаемый размер JList.

9
ответ дан 18 December 2019 в 10:48
поделиться

Have you tried calling the validate or revalidate method of the JList upon making changes to the list data?

myList.setListData(someArray);
myList.revalidate();

Just for your information, I just did a quick investigation of the difference between validate and revalidate and it seems to be that validate will the layout for the component the method was called on and its children, while revalidate will go all the way up to its highest parent and then perform layout changes and such to all its children.

Calling revalidate on myList will not only validate the list itself, but it will also validate the scroll pane as well, therefore, affecting the visibility of the scroll bar depending on the items being drawn in the list.

2
ответ дан 18 December 2019 в 10:48
поделиться

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

public class Frametest {

private JList list;

public Frametest() {
    JFrame f = new JFrame("Scrollable JList");
    f.setSize(200, 300);
    JScrollPane jsp = new JScrollPane();        
    list = new JList();
    jsp.getViewport().add(list);
    f.getContentPane().setLayout(new BorderLayout());
    f.getContentPane().add(jsp, BorderLayout.CENTER);
    JButton button = new JButton("update");
    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            Object[] objects = new Object[20];
            for(int i=0; i<20; i++) {
                objects[i] = "foo foo foo foo foo foo foo foo foo foo foo foo "+i;
            }
            list.setListData(objects);
        }
    });
    f.getContentPane().add(button, BorderLayout.SOUTH);
    f.setVisible(true);     
}

public static void main(String[] args) {
    new Frametest();
}}
3
ответ дан 18 December 2019 в 10:48
поделиться

Это выглядит неправильно:

jsp.getViewport().add(list);

Вместо этого используйте:

jsp.setViewportView(list);

или

new JScrollPane(list);

, и список будет правильно добавлен в область прокрутки. Добавление этого способа сообщает области прокрутки, что она должна прислушиваться к изменениям.

1
ответ дан 18 December 2019 в 10:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: