0

我有一个Jpanel名为的mainPanel类和另一个名为MyPanelextends的类JPanel。我想添加MyPanelmainPanel. 我做了这段代码,没有得到任何结果。

这是我的主要课程mainPanel

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;


public class Main extends JFrame {

    private JPanel contentPane;
    private final JPanel mainPanel = new JPanel();

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Main frame = new Main();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Main() {
        inItGUI();
    }
    private void inItGUI() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 662, 417);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        mainPanel.setBounds(25, 11, 611, 341);

        contentPane.add(mainPanel);
        mainPanel.setLayout(null);

        mainPanel.add(new MyPanel());// **Here i added MyPanel**
        mainPanel.revalidate();
        repaint();
    }

}

这是我MyPanel之前添加的 beeb 课程mainPanel

import java.awt.Component;

import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


public class MyPanel extends JPanel {

    private final JButton btnNewButton = new JButton("New button");
    private final JButton btnNewButton_1 = new JButton("New button");
    public MyPanel() {

        inItGUI();
    }
    private void inItGUI() {
        setLayout(null);
        btnNewButton.setBounds(60, 49, 106, 43);

        add(btnNewButton);
        btnNewButton_1.setBounds(189, 49, 89, 43);

        add(btnNewButton_1);
    }
}
4

1 回答 1

4

null欢迎来到布局管理器的奇妙陷阱之一

如果您删除布局管理器,则您的组件不会被自动调整大小和定位。

基本上正在发生的事情是MyPanel被添加到mainPanel0x0 并将其定位为 0x0,因此没有任何内容开始显示。

真正的解决方案是使用适当的布局管理器

不要欺骗自己。在现代计算机系统领域中,管理组件的位置和大小,尤其是组件之间的关系是一项复杂的工作。您必须能够考虑如何根据当前系统的字体、DPI、方向等来呈现每个组件,然后考虑这可能如何影响共享同一容器的其他组件...您还必须监视附加到的组件层次结构的变化......

这是布局管理器提供的工作... Swing 是围绕布局管理器的使用而设计的,您应该有很好的理由忽略它们...恕我直言

于 2013-08-23T03:30:19.687 回答