您好我一直在使用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();
}
我没有收到错误消息,如果我在代码中添加任何其他内容,例如在文本框中添加文本,则可以正常工作。我检查了一些愚蠢的错误,例如面板名称和按钮错误,但这都是正确的。任何人都可以看到或建议为什么单击按钮时文本没有出现在面板中?
答案 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
您可以在此主题中找到更多信息: