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);        
    }

}

編集:以下の即時の返信に応えて、私はこれが完全にやり過ぎのように思われることに同意します。次のコードでもJPanelにJLabelが追加されないため、このパスをたどりました。

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インスタンスを取得するには、これを使用するだけです(したがって、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 に答える