に と がありJPanel
ます。実行時に[クリック時]
に追加します。JButton
JFrame
JLabel
JPanel
JButton
次のコードを使用します。
panel.setLayout(null);
jLabel _lbl=new jLabel();
_lbl.setText("Label");
panel.add(_lbl);
panel.validate();
しかし、何も表示されませJLabel
んJPanel
。
JLabel
私はあなたが呼び出されたを作成するのを見ます_lbl
:
JLabel _lbl=new JLabel();
ただし、パネルに追加することはありません。JLabel
代わりに、パネルにテキストなしで新しいものを追加します。
panel.add(new JLabel());
もちろん、これは表示されない空のラベルを作成します。
また、次のように追加した後、インスタンスでrevalidate()
andを呼び出してみrepaint()
てください。JPanel
JLabel
JLabel _lbl=new JLabel("Label");//make label and assign text in 1 line
panel.add(_lbl);//add label we made
panel.revalidate();
panel.repaint();
これにより、新しいコンポーネントに合わせてpack()
サイズを変更するために、フレーム インスタンスを呼び出す必要がある場合もあります。JFrame
また、null
/Absolute
レイアウトは絶対に使用しないでください。これは (アニメーションを行う場合を除いて) 非常に悪い習慣であり、問題があり、非常に使いにくいことが判明する可能性があります。
代わりに次を使用しますLayoutManager
。
JPanel
または、単純な呼び出しでコンポーネントが 1 つしかない場合はadd(label);
、JPanel
サイズが拡大されます。
アップデート:
ここに小さなサンプルがあります。を押すたびにJLabel
s を追加するだけです。JPanel
JButton
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class JavaApplication116 {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new JavaApplication116().createAndShowUI();
}
});
}
private void createAndShowUI() {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initComponents(frame);
frame.setResizable(false);
frame.pack();
frame.setVisible(true);
}
private void initComponents(final JFrame frame) {
final JPanel panel = new JPanel(new FlowLayout());
JButton button = new JButton("Add label");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JLabel _lbl = new JLabel("Label");//make label and assign text in 1 line
panel.add(_lbl);//add label we made
panel.revalidate();
panel.repaint();
frame.pack();//so our frame resizes to compensate for new components
}
});
frame.getContentPane().add(panel, BorderLayout.CENTER);
frame.getContentPane().add(button, BorderLayout.SOUTH);
}
}