我做了一个applet,前期是放在frame里面测试的
运行一切良好但是放在网页上之后,就不能正确运行了applet里面包括一个table,一个panel
通过table里面的复选框勾选与否,来刷新panel想问一下:
会有哪些原因导致这种情况的?

解决方案 »

  1.   

    是不能正确显示还是不能正确运行?
    如果不能正确显示,可以看看你的嵌入代码或者JDK_HOME设置是否正确;
    如果不能正确运行,你可以看看是不是你混用了带“J”与不带“J”的组件,
    他们一个轻量级一个重量级,有时候刷新是不太好用。你去查查,如果确是这方面的原因,贴上来再说解决之道。
      

  2.   


    谢谢shengli_liao(我是谁?) 的拨冗赐教应该是不能正确运行,如table不能同时选择两个复选框,而且对panel的刷新也不太友好程序的组件都是使用的swint里面的带"J"的
    只使用了awt的geom包和事件里面的一些类这也有影响么??
      

  3.   

    哦,使用的swint里面的带"J"的
    和awt的geom包及事件里面的一些类不会有影响,我做过很多表中带组件的程序,都能正确运行。
    要不你把table中选择复选框的响应事件及panel的刷新段程序复制上来,别复制所有的,选择关键的就好。
      

  4.   

    好的
    table和panel都是自己扩展的table.getModel().addTableModelListener(new TableModelListener() {
            public void tableChanged(TableModelEvent tme) {
              for (int i = 1; i < table.getRowCount(); i++) {
                if (table.getValueAt(i, 0).equals(Boolean.TRUE)) {
                   ...//这里是遍历每个复选框,如果选中,则添加到一个List里面
                }
              }
              panel.setList(list);
              panel.repaint();
            }把list传给panel之后,重绘是调用panel的repaint()方法的
    还是你麻烦你看看这个思路
      

  5.   

    1、list是否为全局变量,每轮循环注意清空;
    2、你覆盖了panel的repaint方法或者paint方法么?
    如果覆盖了,第一句话加上super.repaint()和super.paint(g);
    3、表格中修改事件我向来不支持用这种做法,因为它可能带来死循环。
      

  6.   


    前面两条的处理都是如你所言
    但是第三条,你是怎么样的处理呢??覆盖table的渲染器吗?
      

  7.   

    我都是在TableModel中处理的,这样处理特别灵活,而且完全可以避免死循环。
    Tm = new EditTbModel(title,new Vector()){
       public void setValueAt(Object value,int row,int col){
       hasSaved = false;
       FlowInStru flow = getSelectedFlowInStru();
       if(flow==null)return;   if(col==3||col==4){
          try{
             Double.parseDouble(value.toString());
          }
          catch(Exception ex){
             MyJOptionPane.showErrorDialog(
               "水位数据输入错误,请重新输入...");
             return;
           }
          }
          if(col==3)
              flow.begLevel = ComFuns.getDoubleValue(value);
          else if(col==4)
              flow.endLevel = ComFuns.getDoubleValue(value);      super.setValueAt(value,row,col);
        }
    };当然这种处理不见得就特别好,所谓萝卜白菜,各有所爱。
      

  8.   


    请问,你是如何触发Table里改变值呢?
      

  9.   

    Tb中的值发生变化,基本过程:
    Tb.setValueAt()=>Tm.setValueAt()=>Tb.getValueAt()
    我使用的方法是控制过程中的Tm.setValueAt()