Проблемы с расширением JPanels - PullRequest
1 голос
/ 14 ноября 2011

Привет, я работаю над проблемой, и у меня есть некоторые проблемы, работающие в Swing. У меня нет проблем при работе с классами, которые расширяют JFrame или JComponent, но когда я пытаюсь использовать класс, который я пишу, который расширяет JPanel, он никогда не будет отображаться, и ничего, что я вызываю на этой панели, не отображается, включая добавление пользовательских Компоненты к этому. Какова общая процедура создания класса расширения JPanel, а затем установки его в качестве области содержимого для использования в JFrame?

Ответы [ 2 ]

3 голосов
/ 14 ноября 2011

Я (мое личное мнение) не вижу ничего плохого с extends JComponent как JComponent, JPanel, JLabel, больше Наследование против состава , например

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

public class CustomComponent extends JFrame {

    private static final long serialVersionUID = 1L;

    public CustomComponent() {
        setTitle("Custom Component Test");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(new CustomComponents());
        pack();
        setMinimumSize(getSize());// enforces the minimum size of both frame and component
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                CustomComponent main = new CustomComponent();
                //main.display();
            }
        });
    }
}

class CustomComponents extends JComponent {

    private static final long serialVersionUID = 1L;

    @Override
    public Dimension getMinimumSize() {
        return new Dimension(100, 100);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(400, 300);
    }

    @Override
    public void paintComponent(Graphics g) {
        int margin = 10;
        Dimension dim = getSize();
        super.paintComponent(g);
        g.setColor(Color.red);
        g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2);
    }
}
2 голосов
/ 14 ноября 2011

Вы должны добавить свой класс, который расширяет Jpanel, к контейнеру, подобному классу JFrame. A, который расширяет JPanel, он не показывает ничего, потому что это компонент, а не контейнер.

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