【问题标题】:Why custom component is not showing up on JFrame?为什么自定义组件没有出现在 JFrame 上?
【发布时间】:2018-09-22 05:48:03
【问题描述】:

我创建了一个自定义组件InOutList,它扩展了JComponent,我想将它添加到JFrame 上。但它没有显示出来。

这是自定义组件类:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class InOutLists extends JComponent{
    GridBagConstraints gbc = new GridBagConstraints();
    JPanel backPanel, p1;
    JLabel label;
    JButton btn;

    InOutLists(){
        setBackground(new Color(51, 102, 255));
        setPreferredSize(new Dimension(100, 100));
        backPanel = new JPanel(new GridBagLayout());
        p1 = new JPanel();

        label = new JLabel("Label 1");
        btn = new JButton("Back");

        p1.add(btn);
        p1.add(label);
        gbc.gridx = 0;
        gbc.gridy = 0;

        backPanel.add(p1, gbc);
    }
}

这里是主类:

import java.awt.Dimension;
import javax.swing.JFrame;
import java.awt.BorderLayout;

public class CCMain extends JFrame{
    CCMain(){
        super("League Management");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(1080, 780);
        setPreferredSize(new Dimension(1080, 700));
        setMaximumSize(new Dimension(1080, 780));
        setVisible(true);

        InOutLists iol = new InOutLists();
        add(iol, BorderLayout.CENTER);
    }
    public static void main(String[] args) {
        new CCMain();
    }
}

【问题讨论】:

  • 添加组件后致电setVisible(true);
  • 我试过了,还是不行。
  • 你现在还没有添加backPanel到任何东西
  • @MadProgrammer 你想添加它作为答案吗?在我看到您的评论之前,我刚刚确认(加上已故的add)是问题所在。
  • @AndrewThompson 当然,我正在考虑将其关闭为“错字”,但它可能有助于为 OP 提供许多问题的上下文:P

标签: java swing jframe jcomponent


【解决方案1】:

如果出于某种原因您需要backPanelp1,请使用:(请参阅注释更改)

class InOutLists extends JComponent{

    InOutLists(){
        setBackground(new Color(51, 102, 255));
        setPreferredSize(new Dimension(100, 100));
        setLayout(new FlowLayout()); //set a layout manager to JComponent
        JPanel backPanel = new JPanel(new GridBagLayout());
        JPanel p1 = new JPanel();
        JLabel label = new JLabel("Label 1");
        JButton btn = new JButton("Back");

        p1.add(btn);
        p1.add(label);

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 0;
        backPanel.add(p1, gbc);

        add(backPanel);//add backPanel to JComponent
    }
}

否则您可以将标签和按钮添加到组件:

class InOutLists extends JComponent{

    InOutLists(){
        setBackground(new Color(51, 102, 255));
        setPreferredSize(new Dimension(100, 100));
        setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();

        JLabel label = new JLabel("Label 1");
        gbc.gridx = 0;
        gbc.gridy = 0;
        add(label, gbc);

        JButton btn = new JButton("Back");
        gbc.gridy = 1;
        add(btn, gbc);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 2012-10-20
    相关资源
    最近更新 更多