免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2892 | 回复: 4
打印 上一主题 下一主题

求助,有关JTabbedPane和JPanel的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-10 17:13 |只看该作者 |倒序浏览
一个Frame中,添加了JTabbedpane,在JabbedPane中添加了Panel.
程序刚打开的时候,应显示第一个panel中的Label"这是第一页",却显示了第二个panel中的"这是第二页",
为何?
如何正常显示?

以下是源码,谢了先!

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Noname2
{
public static void main(String args[])
{
  new MyTabbedPane();
}
}
class MyTabbedPane extends Frame implements ChangeListener
{
JTabbedPane jtp;
int currentIndex=0;
int systemtype=1;

/////////////////////////////////////////////////////////////////////////////
JPanel[] pn;//= new JPanel(new GridLayout(10, 1));//定义面板

///////////////////////界面一////////////////////////////////////////////////

Label systemLabel=new Label("这是第一页";
/////////////////////end of 界面一/////////////////////////////////////////////
///////////////////////界面二//////////////////////////////////////////////////

Label meansLabel=new Label("这是第二页";
/////////////////////end of 界面二////////////////////////////////////////////

MyTabbedPane()
{
super("使用卡片容器";
jtp=new JTabbedPane();
pn=new JPanel[9];
//初始化

for(int i=0;i<9;i++)
{
  
  pn=new JPanel(new GridLayout(10, 1));////初始化,加入布局;
  pn.setBackground(Color.lightGray);
  jtp.addTab("第"+(++i)+"步",pn[--i]);
  
}

jtp.addChangeListener(this);
add(jtp,BorderLayout.CENTER);
addWindowListener(new WindAdpt());
setSize(640,480);

interface1();
interface2();

show();

}//end of MyTabbedPane()


public void stateChanged(ChangeEvent e)
{
  if(e.getSource()==jtp)
  {
  int i=((JTabbedPane)e.getSource()).getSelectedIndex();
  pn[currentIndex].setVisible(false);
  pn.setVisible(true);
  currentIndex=i;
  }

}//end of  public void stateChanged(ChangeEvent e)


/////////////////////////////初始化 界面一///////////////////////////////////
public void interface1()
{
pn[0].add(systemLabel);
pn[0].setVisible(true);

}//end of interface1()
/////////////////////////////end of 界面一///////////////////////////////////////

/////////////////////////////初始化 界面二///////////////////////////////////
public void interface2()
{
pn[1].add(meansLabel);
pn[1].setVisible(false);

}//end of interface2

/////////////////////////////end of 界面二///////////////////////////////////////

}//end of class



class WindAdpt extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
(e.getWindow()).dispose();
System.exit(0);
}
}

java.jpg (6.18 KB, 下载次数: 45)

java.jpg

java.jpg (6.18 KB, 下载次数: 44)

java.jpg

论坛徽章:
0
2 [报告]
发表于 2004-12-11 19:33 |只看该作者

求助,有关JTabbedPane和JPanel的


  1. public void interface2() {
  2.                 pn[1].add(meansLabel);
  3.                 meansLabel.setVisible(false);
  4.                 pn[1].setVisible(false);
  5. }//end of interface2
复制代码

论坛徽章:
0
3 [报告]
发表于 2004-12-13 10:42 |只看该作者

求助,有关JTabbedPane和JPanel的

多谢!

可这是为什么呢?我已经把加载组件meansLabel的panel设为setVisible(false)了啊
为什么组件可以绕过panel?

论坛徽章:
0
4 [报告]
发表于 2004-12-13 11:08 |只看该作者

求助,有关JTabbedPane和JPanel的

JPanel.setVisible()实际上时继承的JComponent.setVisible()。里面有调用了Component.setVisible(),因为Container类同样没有覆盖setVisible().
看了所有的代码之后就可以发现,并没有把JPanel上摆放的其他Component也设置成invisible的。所以虽然JPanel不可见了,但是上边的Label仍然时可见的。结果就把第二个Label给显示出来了。

论坛徽章:
0
5 [报告]
发表于 2004-12-16 14:49 |只看该作者

求助,有关JTabbedPane和JPanel的

多谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP