Java Swing:将JLabel添加到JPanel

我只是想将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); 

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

这似乎是为了做一个基本的事情而跳过篮球; 简单地打电话

 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实例,只需使用它(因此addLabel会改为执行this.setLayout(blah))。 但是,当然也没有必要将JPanel子类化为像添加JLabel这样简单的东西

总的来说,这是最简单的挥杆应用程序:

  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 

首先,你已经从JPanel扩展了

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

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

试试这个

 JLabel myLabel = new JLabel("test text"); myLabel.setSize(myLabel.getPreferredSize()); panel.add(myLabel); panel.revalidate(); panel.repaint();