JComponent 插入非空 JPanel

问题描述

我有点生气。 我只想将一个 JComponet(包含一个图形)插入到一个必须在它之前包含其他对象的 mainPanel 中。 mainPanel 是一个简单的 JPanel,添加到 JFrame 中,内部有两个面板(一个类似于带有 BoxLayout 的表单面板 - JLabels + JTextField + JButton - 另一个带有包含一组 JLabel 以汇总一些数据的 GridLayout)。 当我单击提交按钮(在第一个面板上)时,我调用一个创建 JComponent objectComp(取决于插入的数据)的方法,将其设置为可见,然后将其添加到 mainPanel。它没有显示。 我也尝试过:

  • 创建另一个面板以包含 JComponent、graPHPanel 和 BorderLayout,并将其添加到 mainPanel。
  • 为 graPHPanel 和 objectComp 设置显式大小
  • 将 objectComp 直接添加到 mainPanel 并设置其显式大小
  • 添加所有面板/对象后调用 repaint()

没有任何效果。我看到前两个面板,但 objectComp 从未出现。唯一可行的方法是将 objectComp 直接添加到 JFrame 中,但这样我就丢失了所有其他对象,并且我不想看到它们。

/**
 */
public class Draw extends JComponent {
// graphic
}

/**
 */
public class MainClass extends JFrame {
/**
 * main panel
 */
private JPanel mainPanel = new JPanel();
/**
 * graphic panel
 */
private JPanel graPHPanel = new JPanel();

/**
 * 
 */
public MainClass() {
    super();
    // maximize
    setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);

    // create form panel and add it to mainPanel
    createFormPanel();
    // create summary panel  and add it to mainPanel
    createSummaryPanel();

    setContentPane(mainPanel);
    setDefaultCloSEOperation(JFrame.disPOSE_ON_CLOSE);
    pack();
}

/**
 * create JComponent
 */
private void createJComp() {

    draw = new Draw(data);
    draw.setVisible(true);
    graPHPanel.setLayout(new BorderLayout());
    graPHPanel.add(draw,BorderLayout.soUTH);
    graPHPanel.setSize(500,500);
    draw.setSize(500,500);
    graPHPanel.setBackground(Color.BLUE);
    mainPanel.add(graPHPanel);
    graPHPanel.setVisible(true);
    SwingUtilities.invokelater(new Runnable(){
        public void run()
        {
            validate();
            draw.repaint();
            graPHPanel.repaint();
            repaint();
        }
    }); 
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)