Изменить фон и размер панелей в карточке

У меня есть несколько панелей в контейнере макета карты (не знаю, правильная ли это терминология). Я не могу найти способ установить расположение или размер этих панелей внутри контейнера. Я пробовал setBounds и setLayout(null) и до сих пор не могу ничего изменить. Это мои поля и конструктор. Я заставил свою рамку работать, и я могу видеть и использовать кнопки для смены карт, но я действительно не могу ничего изменить в картах. Я установил две панели карточек, две из которых имеют разные фоны, но они создают только небольшую цветную границу вокруг кнопки и оставляют ее в центре экрана.

Я также не понимаю, почему мой код не вставляется должным образом... Извините!

public class TestPanel extends JPanel implements ActionListener {

CardLayout cl = new CardLayout();

private JPanel panelCont = new JPanel();

private JPanel panel1 = new JPanel();

private JPanel panel2 = new JPanel();

private static JButton but1 = new JButton("Change panels");

private static JButton but2 = new JButton("Change back");

public TestPanel() {

    panelCont.setLayout(cl);
    panel1.add(but1);
    panel2.add(but2);
    panel1.setBackground(Color.black);
    panel2.setBackground(Color.blue);
    panelCont.add(panel1, "1");
    panelCont.add(panel2, "2");
    cl.show(panelCont, "1");
    but1.addActionListener(this);
    but2.addActionListener(this);
    add(panelCont);
}
}

Спасибо. Заранее извиняюсь. Мне трудно понять расположение карт.


person Cammers    schedule 27.05.2013    source источник
comment
Чтобы использовать форматирование кода, выберите образец и нажмите кнопку {} над формой публикации/редактирования с сообщением.   -  person Andrew Thompson    schedule 27.05.2013
comment
Я попробовал setBounds и setLayout(null) и все еще не могу ничего изменить. Не используйте эти методы. Графические интерфейсы Java могут работать на нескольких платформах, с разными разрешениями экрана и с использованием разных PLAF. Как таковые они не способствуют точному размещению компонентов. Вместо этого для надежного графического интерфейса используйте менеджеры компоновки или их комбинации, а также заполнение макета и границы для пробелов, чтобы упорядочить компоненты. Чтобы быстрее получить помощь, опубликуйте SSCCE, размер панелей зависит от макета контейнера, в который они добавлены. .   -  person Andrew Thompson    schedule 27.05.2013


Ответы (2)


CardLayout учитывает предпочтительный размер панелей, добавленных в макет. То есть размером будет размер самой большой панели, добавленной в макет.

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

Макет по умолчанию для панели — FlowLayout. FlowLayout по умолчанию имеет 5-пиксельный горизонтальный/вертикальный зазор вокруг каждого компонента. Таким образом, предпочтительный размер вашей панели равен размеру кнопки плюс зазор в 5 пикселей.

Панель отображается корректно. При добавлении других компонентов на панель размер будет меняться по мере необходимости.

person camickr    schedule 27.05.2013

Непонятно, где вы pack() заключаете Window. По умолчанию pack() заставляет панель с CardLayout принять размер предпочтительного размера самой большой панели, который определяется размером ее содержимого. В этом примере используется setPreferredSize() для указания произвольного размера, но вы можете переопределить getPreferredSize(), как показано здесь.

изображение

person trashgod    schedule 27.05.2013