Cardlayout на нулевой раскладке

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

  public class Frame extends JFrame
{
public Frame () {
    super("frame");
    this.setLayout(null);
    this.setIconImage(Toolkit.getDefaultToolkit().getImage(Main.class.getProtectionDomain().getClassLoader().getResource("icon.png")));
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setSize(1250, 550);
    this.getContentPane().setBackground(Color.GRAY);
}

}

Вот где я создаю экземпляр JFrame:

public static Frame frame;
public static void initialize()
{
    frame = new Frame();
    CardLayout cardLayout = new CardLayout();
    PanelContainer panelContainer = new PanelContainer(cardLayout);

    panelContainer.setLayout(cardLayout);

    JPanel panel1 = new Panel1();
    JPanel panel2 = new Panel2();

    panelContainer.add(panel1, "panel1");
    panelContainer.add(panel2, "panel2");

    cardLayout.show(panelContainer, "panel1");

    gui.add(panelContainer, null);

    gui.validate();
    gui.setVisible(true);
}

Вот класс контейнера панели:

public class PanelContainer extends JPanel
{
public PanelContainer(CardLayout cardLayout)
{
    super(cardLayout);
    this.setVisible(true);
  }
}

И, наконец, вот панели 1 и 2, они имеют одинаковый код:

 public class Panel1 extends JPanel
  {
   public Panel1 ()
   {
    super();
    this.setBackground(Color.GRAY);
    addButtons(this);
}
   public static void addButtons(FrontPanel panel)
{
    JButton testButton = new JButton(new ImageIcon(Images.TestImage);
    testButton (30,30);
    testButton (0,0);
    panel.addtestButton 
}
}

Спасибо за ваше время и помощь!

1 ответ

Несколько вопросов:

  • Всякий раз, когда вы даете контейнеру нулевую разметку, вы, кодировщик, несете полную ответственность за указание размера и расположения всех добавленных компонентов.
  • Если вы этого не сделаете, добавленные компоненты будут иметь размер 0.
  • Сказав это, вы почти никогда не должны использовать нулевую разметку, поскольку это приводит к тому, что GUI являются негибкими и почти невозможными для обновления и отладки.
  • Ваш код также показывает чрезмерное чрезмерное использование статического всего, что предполагает, что вы могли бы хорошо изучить концепции ООП Java, прежде чем пытаться создавать сложные графические интерфейсы. Создание статических методов и полей приводит к коду, который трудно улучшить, который не может быть унаследован и труден для тестирования, включая модульное тестирование.

Кроме того, я не вижу, где вы добавляете что-либо в JFrame. И вы, похоже, используете переменную gui, которая никогда не объявляется и не инициализируется. Ваша переменная Frame называется frame - может ли gui и frame быть одним и тем же? Вы неправильно написали свой код для нас?


редактировать

... а что касается чрезмерного использования статического "всего"; Я новичок в Java, и я пытаюсь стать лучше в использовании статики, проблема в том, что я не совсем понимаю смысл этого.

Вот почему я настоятельно призываю вас изучить концепции объектно-ориентированного программирования Java, прежде чем пытаться создать сложный графический интерфейс. В противном случае вы рискуете поставить телегу перед лошадью.

Другое дело, что я не использую макет, потому что я хочу много контролировать все,

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

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

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

Удача!

Другие вопросы по тегам