при попытке добавить Jpanel в JFrame, но содержимое Jpanel будет показано после изменения размера окна JPanel - PullRequest
2 голосов
/ 11 декабря 2011

Я пытаюсь научиться делать вещи с графическим интерфейсом в Java в стиле кодирования, и вот что я написал:

import java.awt.Container;
import java.awt.Panel;

import javax.swing.*;

public class Class1 extends JFrame {


    public void createGUI()
    {
        JpanelMock jm = new JpanelMock();
        setTitle("Frame1");
        setSize(320,200);
        this.add(jm.drawGUI());

    }

    public static void main(String [] arg)
    {
        Class1 cls = new Class1();

        cls.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        cls.setVisible(true);
        cls.createGUI();
    }

}

//----------------------------JpanelMock.java


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

public class JpanelMock extends JPanel {

    public JpanelMock() {

    }

    public Component drawGUI()
    {
        super.setBackground(Color.YELLOW);
        JButton b = new JButton("button 1");
        JLabel l = new JLabel("label 1");
        JTextField tf = new JTextField("text 1");
        this.add(b);
        this.add(l);
        this.add(tf);
        return this;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        //drawGUI();
    }

}

но когда я запускаю программу, если я не делаючто-либо связанное с перерисовкой события Я не вижу свою желтую jpanel с кнопкой + +.почему это происходит?

Ответы [ 2 ]

3 голосов
/ 11 декабря 2011

Всякий раз, когда я вижу такой вопрос, как ваш, мне не нужно смотреть на код.Вы вызываете setVisible(true) на JFrame, прежде чем добавлять к нему компоненты.Измените порядок этого: вызовите setVisible(true) на вашем JFrame только после того, как были добавлены все компоненты.

например,

public static void main(String [] arg) {
    Class1 cls = new Class1();

    cls.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // cls.setVisible(true); // *** removed
    cls.createGUI();
    cls.setVisible(true); // *** added
}
3 голосов
/ 11 декабря 2011

Это потому, что вы никогда не вызываете метод setVisible() ни для одного из ваших компонентов.

Вы должны добавить только одну строку в конце вашего main метода: cls.setVisible(true);

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