Java 怎么更改控件的????谢谢!!

abcdhy 2003-09-19 05:49:59
下面的代码怎么不能成功执行啊???

谢谢!!!!!!!!!

//file:ConctrlTest.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ConctrlTest extends JFrame
{
public static void main(String args[]) {
System.setProperty("swing.plaf.metal.controlFont","宋体");
new ConctrlTest();
}
private Container p = getContentPane();
JButton btn = new JButton("更改控件");
JComponent tt = new JTextField(10);
public ConctrlTest()
{
this.setTitle("控件更改的GUI更新测试");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(300,200,300,200);
p.setLayout(new FlowLayout(FlowLayout.CENTER));
p.add(tt);
p.add(btn);
this.setVisible(true);
btn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
tt = new JLabel("成功了,就是这样的");
ConctrlTest.this.repaint();
}
});
}
}

请教高手???怎么解决这个控件更行的问题??
...全文
85 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
abcdhy 2003-09-22
  • 打赏
  • 举报
回复
up
yangFrame 2003-09-21
  • 打赏
  • 举报
回复
同意你说的,我也是发现repaint()不行,也不知道怎么回事。
才想用remove(),然后add().

你的目的只是把JTextField变成JLable么?
如果只是这样的话用JTextField.enable(FAlSE)也差不多。
abcdhy 2003-09-21
  • 打赏
  • 举报
回复
首先谢谢 yangFrame(yangFrame) 的建议,但这只是我写的一个演示问题的代码!

我真正开发的程序要比这个程序复杂得多了,你的方法,在这里是可以的,但放到一个复杂的界面中,这几乎就是不可能实现的。我的写的程序界面的各个部分都是通过各自不同的模块来完成的,要完全的重新去布局一个已经显示了的界面也是不可能实现的。不过仍很谢谢你!!!

huanjing51(幻境) ,在 java 中,都是以“引用”来表示对象的,我改变了一个引用指向的对象,其实也就是改变了(例子中 tt 这个对象)。因此我觉得不需要在 用一下 add 了。

按照我的设想,当我改变了 tt 指向的对象后,当 repaint(),时,应该时调用新对象的 绘制 函数了,但这个没有变成现实,我怀疑的可能是 Frame 类自己去缓冲了他自己的组件对象,不知道我的推测对不对?????

请高手指点指点!!!!!!!!

谢谢!!!!!!!!
abcdhy 2003-09-21
  • 打赏
  • 举报
回复
我是在开发一个自定义的组件

这个组件 有不同的显示模式,为了以后扩展这个显示模式的方便
我给这个组件做了公共的基类,然后在为各个显示模式都做了一个扩展类。

我在我的应用中,在一个地方显示了这样的一个组件

当我要更改这个组件的显示模式时,就是使用的我演示的方法(换用不同的子类实现来完成)可能我这个方法本身就有问题吧

当然如果把所有的代码都写在一个类里,运行时根据不同的情况,用 if 语句来执行不同的代码是可以的,但这样,类的大小会至少超过 3000 行,而且以后扩展更多的显示模式也非常的复杂。这在软件设计中是不可取的。

学习 设计模式 都半年多了,一直理解得不是很好,yangFrame(yangFrame) 你对这个问题有什么好的解决方法。谢谢!!

有时间一起讨论一下

我的 QQ 4109266


yangFrame 2003-09-19
  • 打赏
  • 举报
回复
我试了一下,位置应该没有变化。
huanjing51 2003-09-19
  • 打赏
  • 举报
回复
楼主的代码连新控件的add代码也没有,怎么可能成功
cwell 2003-09-19
  • 打赏
  • 举报
回复
想了很久,没找到办法。
如楼上说的那样,那控件的位置就有可能发生改变了。
jan4984 2003-09-19
  • 打赏
  • 举报
回复
老大,你至少也要把出错信息帖出来嘛。
你应该在类的声明中加上implement ActionListener
然后
btn.addActionListener(this);
yangFrame 2003-09-19
  • 打赏
  • 举报
回复
我有一个建议。
public void actionPerformed(ActionEvent e)
{
tt = new JLabel("成功了,就是这样的");
p.removeAll();
p.add(tt);
p.add(btn);
ConctrlTest.this.setVisible(true);
ConctrlTest.this.repaint();
}
abcdhy 2003-09-19
  • 打赏
  • 举报
回复
你看我贴出来的代码??!!!

我怎么 reprint() 都不可以啊?????

所有控件的 reprint() 我都试过了!!!

请高手指点????

最好能把上面代码 描述 的功能实现!!!!
谢谢!!!
onefox 2003-09-19
  • 打赏
  • 举报
回复
reprint() show()
abcdhy 2003-09-19
  • 打赏
  • 举报
回复
哈哈!
这段代码本身是没有问题的??
你可以拷贝下来,执行一下

但就是没有出现 预期 的效果---完成控件的更改!!

我想请教的是要怎么办,才可以实现这样的 更改控件的功能.

谢谢!!!

62,634

社区成员

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

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