JPanel 不添加新组件
JPanel not adding new components
我正在构建一个 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();
}
}
i need to add dynamically...
将组件动态添加到面板时需要调用:
revalidate()
和
repaint()
(有时需要)
在面板上。
默认情况下,组件的大小为 (0, 0),因此没有可绘制的内容。
revalidate()
将调用布局管理器,repaint()
确保重新绘制整个面板
messagesPanel.add(new JLabel("Mex:", SwingConstants.LEFT), BorderLayout.PAGE_START);
messagesPanel.add(new JLabel("Mex:", SwingConstants.LEFT), BorderLayout.PAGE_START);
指定 BorderLayout.PAGE_START
似乎没有意义。您只能将单个组件添加到 BorderLayout 中的任何区域。如果您看到多个组件,您的面板必须使用其他布局(不是 BorderLayout)。因此不需要该约束。
我正在构建一个 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();
}
}
i need to add dynamically...
将组件动态添加到面板时需要调用:
revalidate()
和repaint()
(有时需要)
在面板上。
默认情况下,组件的大小为 (0, 0),因此没有可绘制的内容。
revalidate()
将调用布局管理器,repaint()
确保重新绘制整个面板
messagesPanel.add(new JLabel("Mex:", SwingConstants.LEFT), BorderLayout.PAGE_START);
messagesPanel.add(new JLabel("Mex:", SwingConstants.LEFT), BorderLayout.PAGE_START);
指定 BorderLayout.PAGE_START
似乎没有意义。您只能将单个组件添加到 BorderLayout 中的任何区域。如果您看到多个组件,您的面板必须使用其他布局(不是 BorderLayout)。因此不需要该约束。