Ich versuche Etiketten jedes Mal zu erstellen, wenn eine Schaltfläche geklickt wird. Die Position der Etiketten sollte geändert werden. Es sollte bei jedem Klick übereinander liegen. Aber es funktioniert nicht. Kein Label erstellen Ich kann nicht einmal ein einzelnes JLabel aus dem Klick-Listener-Code erstellen. Aber die Ausführung findet innerhalb der innersten 'if' Anweisung statt.dynamisch hinzufügen JLabel zu UI in Java auf Knopfdruck mit einem einzigen Objekt
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class ChatClient{
static int y=600;
static JLabel label=null;
public static void main(String args[]) throws Exception{
String defaultMessage = "Enter your message..";
JFrame frame = new JFrame("FireFly");
JTextField text = new JTextField(defaultMessage);
//manipulate the default message in the text field
text.addFocusListener(new FocusListener(){
public void focusGained(FocusEvent ae){
if(text.getText().equals(defaultMessage)){
text.setText("");
}
}
public void focusLost(FocusEvent ae){
if(text.getText().isEmpty()){
text.setText(defaultMessage);
}
}
});
text.setBounds(10,620,295,40);
frame.add(text);
JButton button = new JButton("SEND");
button.setBounds(310,620,80,40);
button.setForeground(Color.WHITE);
button.setBackground(Color.decode("#11A458"));
button.setFocusPainted(false);
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
if(!text.getText().equals(defaultMessage))
{
if(!text.getText().isEmpty()){
label=new JLabel(text.getText());
label.setBounds(10,y,380,20);
y=y-20;
frame.add(label);
}
}
}
});
frame.add(button);
frame.setSize(400,700);
frame.setLayout(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Sie würden rufen müssen 'revalidate()' und 'repaint()' auf dem Behälter Sie jederzeit hinzufügen oder entfernen Komponenten daraus. Ihr erster großer Fehler ist es, Null-Layouts zu verwenden - vermeiden Sie diese, da sie Sie zurückkommen werden, garantiert. –
Ich muss mich auch fragen, ob es besser wäre, eine JList zu verwenden. –