通过按钮单击

时间:2016-01-26 14:30:47

标签: java swing

您好我一直在使用netbeans和swing功能一段时间。我最近只是通过拖放将JPanel添加到我的J帧中。我还添加了一个按钮。我编写了以下代码,尝试在单击按钮时向Panel添加文本。以下是我使用的代码。

public void addTextTry(){
        JLabel l1 = new JLabel("The add method appends an element to an array.");
        JLabel l2 = new JLabel("This inturn increases the arrays size.");
        jPanel1.add(l1);
        jPanel1.add(l2);
    }

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        addTextTry();
    }  

我没有收到错误消息,如果我在代码中添加任何其他内容,例如在文本框中添加文本,则可以正常工作。我检查了一些愚蠢的错误,例如面板名称和按钮错误,但这都是正确的。任何人都可以看到或建议为什么单击按钮时文本没有出现在面板中?

2 个答案:

答案 0 :(得分:1)

我认为在向面板添加标签后需要调用jPanel1.revalidate(),以便重新应用布局。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;


public class DisplayMessageTrial extends JFrame {

private JPanel jPanel1;
private JButton button = new JButton("Click Me!");

public DisplayMessageTrial() {
    super("DisplayMessageTrial");
    jPanel1 = new JPanel();
    jPanel1.add(button);
    setContentPane(jPanel1);
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            jButton1ActionPerformed(e);
        }
    });
}

public void addTextTry(){
    JLabel l1 = new JLabel("The add method appends an element to an array.");
    JLabel l2 = new JLabel("This inturn increases the arrays size.");
    jPanel1.add(l1);
    jPanel1.add(l2);
    jPanel1.revalidate();
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    addTextTry();
}  


public static void main(String[] args) {
    DisplayMessageTrial trial = new DisplayMessageTrial();
    trial.setBounds(100, 100, 300, 300);
    trial.setVisible(true);
}

}

答案 1 :(得分:1)

在将标签添加到面板之前,您可能需要先使用Rectangle target = getCellRect(selectedRow, 0, true), vis = getVisibleRect(); target.x = vis.x; target.width = vis.width; scrollRectToVisible(target); 清除标签(除非您想留下您之前可能已添加的现有儿童)。

将标签添加到面板后,您必须通过removeAll通知面板其新内容,以便重新计算其布局,并重新绘制组件。

最后,您应该告诉专家组revalidate本身。

总而言之,您的方法如下:

repaint

您可以在此主题中找到更多信息:

Java Swing revalidate() vs repaint()

相关问题