3

我只是想将 JLabel 添加到现有的 JPanel。这看起来很简单,我已经到处搜索了。我认为这是正确的,但标签没有出现在我的面板上。有人看到我错过了什么吗?谢谢!

ResultsPanel myPanel = new ResultsPanel(pnlResults);  //pnlResults is an existing JPanel
myPanel.addLabel(pnlResults);

public class ResultsPanel extends JPanel {

    JPanel myPanel;

    public ResultsPanel(JPanel thisPanel) {
        myPanel = thisPanel;
    }

    public void addLabel(JPanel myResults) {
        JLabel myLabel = new JLabel("test", JLabel.LEFT);
        myPanel.setLayout(new FlowLayout());
        add(myLabel);        
    }

}

编辑:针对下面的即时回复,我同意这似乎完全是矫枉过正。我走这条路是因为以下代码也不会导致将 JLabel 添加到我的 JPanel 中:

JLabel myLabel = new JLabel("test"); 
pnlResults.add(myLabel);

我更愿意使用这段代码,所以如果你认为它更有可能工作,请随时评论它(当然,有一些修改)。再次感谢!

4

4 回答 4

7

这似乎只是为了做一件基本的事情。只需调用

JLabel label = new JLabel("Test text");//initialize the label
//do some stuff with label here maybe...
panel.add(label);//now add it

不需要让一个类扩展JPanel,并包含一个JPanel;如果一个类扩展了 JPanel,要获取 JPanel 实例,只需使用 this(因此 addLabel 将改为执行 this.setLayout(blah))。但是当然,甚至不需要为像添加 JLabel 这样简单的东西子类化 JPanel

总的来说,这几乎是最简单的摇摆应用程序:

    JFrame frame = new JFrame("Basic Swing");//Make a frame
    frame.setSize(300, 300);//Give it a size
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//Make it go away on close
    JPanel panel = new JPanel();//Make a panel
    frame.add(panel);//Add it to your frame

    JLabel label = new JLabel("Hello StackOverflow!");//Make a label
    panel.add(label);//Add it to the panel (which is on the frame)

    frame.setVisible(true);//Show the frame
于 2012-08-24T06:07:33.323 回答
5

首先,你已经从JPanel

其次,你已经提供了你自己的JPanel

现在,从您的代码片段中,无法确定是否已添加ResultsPanemyPanel已添加到Container任何类型中,但根据您所说的,我建议这将是您的主要问题。

于 2012-08-24T06:08:05.490 回答
0

尝试这个

JLabel myLabel = new JLabel("test text");
myLabel.setSize(myLabel.getPreferredSize());
panel.add(myLabel);
panel.revalidate();
panel.repaint();
于 2013-06-25T07:25:04.173 回答
0

你真的想要/需要有一个实际的 JLabel 对象吗?如果没有,您可以按如下方式标记您的面板:

public void addLabel() {
    myPanel.setBorder(new TitledBorder("test"));
}
于 2019-03-19T22:02:58.940 回答