JFrame не будет отображать панель / кнопки (отдельные классы) - Java - PullRequest
2 голосов
/ 14 мая 2011

Так что мне нужно использовать два класса для моего GUI, один класс называется «UI» и имеет основной метод, а другой - UIControls, который будет содержать все JPanels / Buttons и, в конечном итоге, GridLayout.Единственная проблема в том, что мой JFrame не будет отображать какие-либо кнопки или JPanels, но до того, как я создал отдельный класс для них, все работало нормально.

В любом случае, спасибо заранее =]

С уважением -SKENG-

// РЕДАКТИРОВАТЬ: у меня уже было "application.add (MP);"в коде, я удалил его, прежде чем я разместил его на этом сайте. Не могу вспомнить, почему я просто пробовал некоторые вещи Я снова добавил его сейчас, и он все еще не работает.Кроме того, gridlayout был просто экспериментом, я создаю другую панель для этого позже;)

UI - Main

import java.awt.*;
import javax.swing.*;

public class UI {    

    public static JFrame application;

public static void main(String []args) {    

    //=================FRAME SETTINGS=================
    application = new JFrame("Despatch Depot Simulator"); 
    application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    application.setLocation(500,200); 
    application.setSize(640,480); 
    application.setLayout(null); 
    application.setBackground(Color.WHITE);
    application.setVisible(true);
    application.setResizable(false);
    }
}

UIControls

import java.awt.*;
import javax.swing.*;

public class UIControls extends UI {

public UIControls() {


//=================PANEL LAYOUT=================
JPanel MP = new JPanel(); //Main UI's Panel (MP = MainPanel) 
MP.setBounds(1,1,640,480);
MP.setBackground(Color.WHITE);
MP.setLayout(null);
application.add(MP);

//=================JBUTTONS=================
JButton AddBox = new JButton("Add Box"); {MP.add(AddBox);}
AddBox.setBounds(505,2,125,30);
JButton AddTube = new JButton("Add Tube"); {MP.add(AddTube);}
AddTube.setBounds(505,34,125,30);
JButton AddEnvelope = new JButton("Add Envelope"); {MP.add(AddEnvelope);}
AddEnvelope.setBounds(505,66,125,30);
JButton ClearAll = new JButton("Clear All"); {MP.add(ClearAll);}
ClearAll.setBounds(505,98,125,30);
JButton CurrentCharge = new JButton("Current Charge"); {MP.add(CurrentCharge);}
CurrentCharge.setBounds(505,418,125,30);
JButton TotalCharge = new JButton("Total Charge"); {MP.add(TotalCharge);}
TotalCharge.setBounds(378,418,125,30);
JButton Save = new JButton("Save"); {MP.add(Save);}
Save.setBounds(2,418,125,30);
JButton Load = new JButton("Load"); {MP.add(Load);}
Load.setBounds(130,418,125,30);

//=================IMAGES=================
ImageIcon imageB = new ImageIcon ("..\\Images\\box.png");
ImageIcon imageBL = new ImageIcon ("..\\Images\\box-large.png");
ImageIcon imageEL = new ImageIcon ("..\\Images\\envelope-large.png");
ImageIcon imageEM = new ImageIcon ("..\\Images\\envelope-medium.png");
ImageIcon imageES = new ImageIcon ("..\\Images\\envelope-small.png");
ImageIcon imageT = new ImageIcon ("..\\Images\\tube.png");
ImageIcon imageTL = new ImageIcon ("..\\Images\\tube-large.png");


//=================LABELS=================
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
JLabel label3 = new JLabel();
JLabel label4 = new JLabel();
JLabel label5 = new JLabel();
JLabel label6 = new JLabel();
JLabel label7 = new JLabel();

GridLayout experimentLayout = new GridLayout(4,3);
MP.setLayout(experimentLayout); 
}
}

Ответы [ 2 ]

3 голосов
/ 14 мая 2011

Вы не добавляете свой JPanel в свой JFrame и не добавляете JLabel или JButton в свой JPanel.Попробуйте:

add(MP); //somewhere in your UIControls constructor

Тогда, но это еще одна проблема, почему вы делаете:

MP.setLayout(null);

Прежде всего вы должны избегать нулевого макета, тогда этот вызов метода совершенно бесполезен, потому чтопосле того, как в своем коде вы устанавливаете макет MP как GridLayout (MP.setLayout (экспериментLayout);)

В дополнение к этому вы нигде не создаете класс UIControls.

2 голосов
/ 14 мая 2011

Помимо 0bbose ответа, я не понимаю, почему UIControl расширяет класс UI.

Что вам нужно сделать, так это организовать свои занятия лучше. Один основной класс, который «запускает» и создает JFrame. Для класса UIControl вы можете добавить его в качестве атрибута класса UI, затем создать его экземпляр при создании объекта UI и добавить его на панель /

public class Launcher {

    public static void main(String[] args)
    {
        UI uiFrame = new UI();
    }
}

public class UI extends JFrame {

    // the panel that will be added to the JFrame
    private UIControl uiControlPanel;

    public UI()
    {
        super("JFrame title");

        // set size, layout, and other stuffs here
        //

        this.uiControlPanel = new UIControl();
        this.add(this.uiControlPanel);

        // make the window visible
        this.setVisible(true);
    }
}

Кстати, вы можете назвать свои классы более явными именами, чем "UI", назвать их "MainFrame", "MainFramePanel" и т. Д., Чтобы вы могли угадать тип компонента, просто читая его имя.

Я думаю, вы должны снова пройти учебники по Swing (Sun) Oracle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...