Cardlayout на нулево оформление jframe

Всеки път, когато променя оформлението на моя JFrame на null, вместо действително да го настроя, 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 
}
}

Благодарим ви за отделеното време и помощта!


person SuperBrea    schedule 11.09.2014    source източник


Отговори (1)


Няколко въпроса:

  • Всеки път, когато дадете на контейнер нулево оформление, вие, кодерът, поемате пълна отговорност за определянето на размера и местоположението на всички добавени компоненти.
  • Ако не направите това, добавените компоненти имат 0 размер.
  • Като каза това, почти никога не трябва да използвате нулево оформление, тъй като това води до GUI, които са негъвкави и почти невъзможни за надграждане и отстраняване на грешки.
  • Вашият код също така показва груба прекомерна употреба на статично всичко, което предполага, че може да е добре да проучите концепциите на Java OOP, преди да се опитате да създадете сложни GUI. Създаването на статични методи и полета води до код, който е труден за подобряване, който не може да бъде наследен и е труден за тестване, включително тестване на единици.

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


Редактиране

...и що се отнася до прекомерната употреба на статично "всичко"; Аз съм нов в java и се опитвам да стана по-добър в използването на static, проблемът е, че не знам напълно значението му.

Ето защо силно ви препоръчвам да изучавате концепциите за обектно-ориентирано програмиране на Java преди да се опитате да създадете сложен GUI. В противен случай рискувате да поставите каруцата пред коня.

Друго нещо е, че не използвам оформление, защото искам много контрол върху всичко,

Което е точно това, което мениджърите на оформлението правят за вас. Вашето мислене, че нулевото оформление работи по-добре, ви маркира като начинаещ, който все още не е разбрал силата на мениджърите на оформлението. След като го направите, ще разберете защо повечето подобни въпроси за нулеви оформления на този сайт получават отговори, подобни на моите.

гледайки в документите на oracle, не намерих оформление, което да ми позволи да направя това. Може би бихте могли да ми предложите нещо, което да използвам?

Обикновено не използвате само едно оформление. Често вмъквам JPanels, като всеки използва удобен за програмист мениджър на оформление, и по този начин мога да конструирам приятни и лесни за настройване и подобряване GUI. Що се отнася до препоръките -- не знам как трябва да изглежда вашата програма, така че не мога да дам никакви конкретни препоръки в момента.

Късмет!

person Hovercraft Full Of Eels    schedule 11.09.2014
comment
Опа съжалявам, преписах го погрешно, gui трябва да е рамка. Съжалявам за това и що се отнася до прекомерната употреба на статично всичко; Аз съм нов в java и се опитвам да стана по-добър в използването на static, проблемът е, че не знам напълно значението му. Друго нещо е, че не използвам оформление, защото искам много контрол над всичко, гледайки в документите на oracle, не намерих оформление, което да ми позволи да направя това. Може би бихте могли да ми предложите нещо, което да използвам? Благодаря за вашата помощ! - person SuperBrea; 11.09.2014