Дополнительные прямоугольники не отображаются на холсте с использованием JFrame и расширяемого класса JPanel [duplicate]

Используйте Array#splice() и Array#push() .

function moveZeros(a) {
    var i = a.length - 1;
    while (i--) {
        if (a[i] === 0) {
            a.push(a.splice(i, 1)[0]);
        }
    }
    return a;
};

var array = [false, 1, 0, 1, 2, 0, 1, 3, "a"];
document.write('
' + JSON.stringify(moveZeros(array), 0, 4) + '
');

2
задан Nic Hartley 17 December 2012 в 20:00
поделиться

2 ответа

Панель содержимого файла JFrame имеет BorderLayout. Если вы поместите компонент в BL без ограничений, он окажется в CENTER. Центр может отображать только один компонент.

Для немедленного эффекта я предлагаю:

f.add(top, BorderLayout.PAGE_START);
f.add(mid);
f.add(bot, BorderLayout.PAGE_END);

Другие точки.

  1. Вынуть f.setSize(500, 500); и вызовите pack() непосредственно перед setVisible(true)
  2. . Для лучшего завершения завершения GUI измените f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); на f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  3. in.setVisible(true); За исключением самого кадра , возьмите их. Компонент автоматически становится видимым, когда он добавляется в контейнер верхнего уровня, и сам контейнер становится видимым.
  4. Измените public class EncDecExample extends JFrame на public class EncDecExample. Этот код содержит ссылку на кадр, и это правый путь.
9
ответ дан Andrew Thompson 19 August 2018 в 19:25
поделиться
  • 1
    Ах, спасибо. Мне было интересно, нужно ли мне расширять JFrame, потому что я видел это так в учебнике, которое я видел перед публикацией вопроса, но это не имело смысла. Отличный ответ, кстати. – Nic Hartley 14 December 2012 в 19:43
  • 2
    Из любопытства, есть ли какой-либо другой макет, который я могу использовать, поэтому мне не нужно добавлять бит BorderLayout.LAYOUT? – Nic Hartley 14 December 2012 в 19:45
  • 3
    Да, есть разные макеты. Конечно FlowLayout и GridLayout с правильным конструктором. Но я немного подозрительно отношусь к этому & quot; так что мне не нужно & quot; вещи. Это приведет к созданию ужасного графического интерфейса. – Andrew Thompson 14 December 2012 в 19:55
  • 4
    Я могу понять, почему вы были бы осторожны ... Это просто помогает с чтением кода (это слово?), И поэтому я могу узнать больше об этом языке. – Nic Hartley 14 December 2012 в 19:58
  • 5
    @NickHartley Это просто помогает с читабельностью кода , что не является основанием для выбора несоответствующего макета и обеспечения плохого пользовательского опыта. FlowLayout и GridLayout, IMHO, очень плохие LayoutManagers и полезны в очень немногих ситуациях. BorderLayout и GridBagLayout намного лучше. – Guillaume Polet 14 December 2012 в 20:01
setBorder(null);

просто установите нулевую границу для jpanel, которую вы используете, и используйте любой макет, который вам нравится.

0
ответ дан Mahdi Khalili 19 August 2018 в 19:25
поделиться
Другие вопросы по тегам:

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