微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JComponent 插入非空 JPanel

如何解决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 举报,一经查实,本站将立刻删除。