【发布时间】:2020-09-30 19:49:15
【问题描述】:
我正在构建一个 GUI,我需要在其中动态地向 JPanel 添加一些标签,但由于某种原因代码无法正常工作:
public class ChatClientGUI extends javax.swing.JFrame {
/**
* Creates new form ChatClientGUI
* @param server : server remoto a cui connettersi
*/
public ChatClientGUI(ChatServerIF server) {
initComponents();
...
messagesPanel.add(new JLabel("Mex:", SwingConstants.LEFT), BorderLayout.PAGE_START);
messagesPanel.add(new JLabel("Mex:", SwingConstants.LEFT), BorderLayout.PAGE_START);
// those works, infact i see 2 "Mex:" label added to the JPanel
}
private void sendButtonActionPerformed(java.awt.event.ActionEvent evt) {
try {
System.out.println("MEX SENT"); // I see this line in the terminal
messagesPanel.add(new JLabel("New mex sent", SwingConstants.LEFT), BorderLayout.PAGE_START);
// this does not work, nothing is added to the JPanel
server.sendMessage(client, username.getSelectedItem(), messageText.getText());
} catch (Exception ex) {
ex.printStackTrace();
}
}
【问题讨论】:
-
我需要动态添加 - 当您动态添加组件时,您需要在面板上调用
revalidate()和repaint()。默认情况下,组件的大小为 (0, 0),因此无需绘制任何内容。 revalidate() 将调用布局管理器,repaint() 确保重新绘制整个面板。 -
@camickr 好的,我已经添加了代码,现在可以使用了,谢谢,请考虑给出答案
标签: java swing user-interface label jpanel