重绘swing控件

THISISWANGYI 2009-01-21 08:26:11
我现在在学习swing。

昨天晚上做了一个小的JFrame,遇到如下疑惑。希望各位帮忙指点一下子。先谢谢大家。

我有一个JFrame background 2个JPanel p1和p2

现在p2上有一个 JButton button。 我想的是如果我点击p2上的button,点一下。然后在另一个panel p2上会出现一个新的按钮 JButton。

我的做法如下:

p1.add(new JButton("name of button"));
p1.repaint();

但不好使。然后我尝试了各种办法如 validate() revalidate() updateUI()等。均没有效果,我想问问大家这到底应该怎么做。有人说可以先把新的button隐藏,但我不认为这是个好办法。感觉思路是把一个新的组建添加到p1里然后重绘p1。这样对吗?到底该怎么做?请大家帮我想想。谢谢各位了。

...全文
167 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
bzwm 2009-01-22
  • 打赏
  • 举报
回复
我按照你说的,写了段代码。
jdk1.6,可以实现。
你实验一下。

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
* @author bzwm
*
*/
public class A extends JFrame{
public A(){
final JPanel p1 = new JPanel();
final JPanel p2 = new JPanel(new FlowLayout());
JButton b = new JButton("ts...");
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
p2.add(new JButton("....."));
p2.validate();
}
});
p1.add(b);
add(p1, BorderLayout.NORTH);
add(p2, BorderLayout.CENTER);
setVisible(true);
setSize(300, 300);
}

public static void main(String args[]){
new A();
}
}
gongfuliang 2009-01-22
  • 打赏
  • 举报
回复
LS的处理还是可以的,对于Container来说,使用repaint来代替validate/revalidate来重新布局容器中的组件是无法得到预期结果的。

像LZ这种要重新布局的,需要调用父组件的validate/revalidate来进行重新布局。

至于LZ的显示不出来的问题,我想知道你的 p1 的布局怎么设置的?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧