请教:如何刷新JLabel的值、SplitPane分隔比例的初始化——两个问题。

nt941 2003-08-19 04:27:57
问题一:如何刷新JLabel等控件的值

例:用一个String初始化一个JLabel,然后把此JLabel放入一个JPanel,再把该JPanel放进一个JFrame,然后改变了这个String的值,可是运行后显示的JLabel还是改变前的名称。请问如何才能使改变发挥作用?

请参考下面的代码。

public class Frame1 extends JFrame {
String str = "old"; //改变的就是它的值!

public Frame1() {
JLabel label = new JLabel(str);
JPanel panel = new JPanel();
panel.add(label);
this.getContentPane().add(panel);

str = "new"; //改变了!下面应该增加什么代码,以使改变显示出来?
…… //????

}

public static void main(String[] args) {
Frame1 frame1 = new Frame1();
frame1.setSize(500,400);
frame1.setVisible(true);
}
}

问题二:文字多点,其实问题超级简单,请耐心看。

在一个左右分隔的JSplitPane1的左半又增加了一个上下分隔的JSplitPane2,在JSplitPane2中的上下部分分别加入了一个JScrollPane,每个JScrollPane中有一棵JTree 。出现的问题是,每次运行的时候初始显示的JSplitPane2的中间的分隔条(Divider)都非常宽(大约有三厘米宽),且居于整个JSplitPane2的顶部,致使JSplitPane2上半部中的JTree几乎显示不出来,但用鼠标把分隔条往下稍微拖动一下以后它就正常了,变成了正常的宽度。

我企图用jSplitPane2.setDividerLocation(0.5);来设置JSplitPane2的分隔条的初始位置,多次调整括号中的值都没有效果。

参考下面代码:

jSplitPane2.setOrientation(JSplitPane.VERTICAL_SPLIT);
jSplitPane2.add(new JScrollPane(tree1),jSplitPane2.TOP);
jSplitPane2.add(new JScrollPane(tree2),jSplitPane2.BOTTOM);
jSplitPane2.setDividerLocation(0.5);//为何不起作用????
jSplitPane1.add(jSplitPane2,jSplitPane1.LEFT);
...全文
351 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
relive 2003-08-21
  • 打赏
  • 举报
回复
nt941(为何?)

让它随着窗口大小的改变而成比例地变化

这个用setDividerLocation(double);也实现不了,你可以试试,其实它就是在设置的瞬间有用,设置完后要调整窗口大小的话,它位置也是不变的,所以要实现这个功能你得监听窗口的componentResized事件,在里面再setDividerLocation(double);才有用。
nt941 2003-08-21
  • 打赏
  • 举报
回复
relive兄:
用你说的jSplitPane2.setDividerLocation(int);方法解决了第二个问题,可是我觉得还有点遗憾,因为这样就只能用具体的象素值来固定分隔条的位置了,而不能让它随着窗口大小的改变而成比例地变化了。
但已经不错了。结帖。
感谢大家的指点!
whyxx 2003-08-20
  • 打赏
  • 举报
回复
String类跟其他的类不一样,当将一个String付值给另一个以后,改变原来那个,后面的不会随之而改,比如;
String a = "aaaa";
String b = a;
a = "cccc";
这个时候b还是"aaaa";所以,要重改jLabel的值只能再用一次setText(str),
relive 2003-08-20
  • 打赏
  • 举报
回复
nt941(为何?)

还没解决吗??
nt941 2003-08-20
  • 打赏
  • 举报
回复
jiangtou 2003-08-19
  • 打赏
  • 举报
回复
是不是当JLabel.setTex(str);完成后str就和JLabel无关了?也就是说即使此时吧str置成null JLabel也会正常显示?

是这样的。
nt941 2003-08-19
  • 打赏
  • 举报
回复
duxin兄:
鄙人的确为菜鸟,还请你多指教!

relive兄:
我已经用setDividerSize设置过分隔条的宽度,当用鼠标拖动使分隔条正常后显示的分隔条的宽度就是我设置的宽度。
setDividerLocation(int)我没用过,我试试吧,有问题再请教你;

jiangtou兄:
就是说你最后也没解决了?

javahui并okwuzhijun兄:
是不是当JLabel.setTex(str);完成后str就和JLabel无关了?也就是说即使此时吧str置成null JLabel也会正常显示?

谢谢各位的指教!

duxin 2003-08-19
  • 打赏
  • 举报
回复
菜鸟一只 路过
relive 2003-08-19
  • 打赏
  • 举报
回复
1、label.setText(str);
2、jSplitPane2.setDividerSize可以设置分隔条的大小
先用jSplitPane2.setDividerLocation(int);吧
setDividerLocation(double)必须是界面初始化完成后,既SplitPane可见时才能用
jiangtou 2003-08-19
  • 打赏
  • 举报
回复
我遇到过第二个问题,同样的代码在别的机器上运行却没有问题,不知何故。
okwuzhijun 2003-08-19
  • 打赏
  • 举报
回复
JLabel.setTex(newStr);
javahui 2003-08-19
  • 打赏
  • 举报
回复
改Label要abel.setText(str);
光改变str对Label不起作用的。
nt941 2003-08-19
  • 打赏
  • 举报
回复
请大家赐教。
谢谢!

62,614

社区成员

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

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