java - ArrayList in Jtable Column -


i'm creating jtable, 1 column (month column) , adding arraylist in column of button.

the arraylist contains name of months depending upon checked months.

my problem when add array list previous row change.

i have no idea going on.

here code problem

package test;  import java.awt.borderlayout; import java.awt.flowlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.util.arraylist; import java.util.list; import javax.swing.jbutton; import javax.swing.jcheckbox; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.jscrollpane; import javax.swing.jtable; import javax.swing.table.defaulttablemodel;  public class jtable extends jframe {      jtable table;     jbutton button;     jpanel mp;      defaulttablemodel model;      jcheckbox chkjan;     jcheckbox chkfeb;     jcheckbox chkmarch;     jcheckbox chkapril;     jcheckbox chkmay;     jcheckbox chkjun;     jcheckbox chkjuly;     jcheckbox chkaug;     jcheckbox chksep;     jcheckbox chkoct;     jcheckbox chknov;     jcheckbox chkdec;      list<string> months = null;      public jtable() {          table = new jtable();         button = new jbutton("add table");         mp = new jpanel();         months = new arraylist<>();          chkjan = new jcheckbox("jan");         chkfeb = new jcheckbox("feb");         chkmarch = new jcheckbox("march");         chkapril = new jcheckbox("april");         chkmay = new jcheckbox("may");         chkjun = new jcheckbox("jun");         chkjuly = new jcheckbox("july");         chkaug = new jcheckbox("aug");         chksep = new jcheckbox("sep");         chkoct = new jcheckbox("oct");         chknov = new jcheckbox("nov");         chkdec = new jcheckbox("dec");          mp.setlayout(new flowlayout(flowlayout.left));         mp.setsize(300, 200);          mp.add(chkjan);         mp.add(chkfeb);         mp.add(chkmarch);         mp.add(chkapril);         mp.add(chkmay);         mp.add(chkjun);         mp.add(chkjuly);         mp.add(chkaug);         mp.add(chksep);         mp.add(chkoct);         mp.add(chknov);         mp.add(chkdec);          model = new defaulttablemodel();         table.setmodel(model);         model.addcolumn("months");          jscrollpane sp = new jscrollpane(table);          setlayout(new borderlayout());          add(sp, borderlayout.center);         add(button, borderlayout.south);         add(mp, borderlayout.north);         setsize(800, 600);          button.addactionlistener(new actionlistener() {              @override             public void actionperformed(actionevent e) {                 month();                 object[] row = {months};                  model.addrow(row);             }         });      }      public void month() {         months.removeall(months);         if (chkjan.isselected()) {             months.add("january");         } else {             months.remove("january");         }          if (chkfeb.isselected()) {             months.add("febuary");         } else {             months.remove("febuary");         }          if (chkmarch.isselected()) {             months.add("march");         } else {             months.remove("march");         }          if (chkapril.isselected()) {             months.add("april");         } else {             months.remove("april");         }          if (chkmay.isselected()) {             months.add("may");         } else {             months.remove("may");         }          if (chkjun.isselected()) {             months.add("jun");         } else {             months.remove("jun");         }          if (chkjuly.isselected()) {             months.add("july");         } else {             months.remove("july");         }          if (chkaug.isselected()) {             months.add("august");         } else {             months.remove("august");         }          if (chksep.isselected()) {             months.add("september");         } else {             months.remove("september");         }          if (chkoct.isselected()) {             months.add("octuber");         } else {             months.remove("octuber");         }          if (chknov.isselected()) {             months.add("november");         } else {             months.remove("november");         }          if (chkdec.isselected()) {             months.add("december");         } else {             months.remove("december");         }     }      public static void main(string args[]) {         /* set nimbus , feel */         //<editor-fold defaultstate="collapsed" desc=" , feel setting code (optional) ">         /* if nimbus (introduced in java se 6) not available, stay default , feel.          * details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html           */         try {             (javax.swing.uimanager.lookandfeelinfo info : javax.swing.uimanager.getinstalledlookandfeels()) {                 if ("nimbus".equals(info.getname())) {                     javax.swing.uimanager.setlookandfeel(info.getclassname());                     break;                  }             }         } catch (classnotfoundexception | instantiationexception | illegalaccessexception | javax.swing.unsupportedlookandfeelexception ex) {             java.util.logging.logger.getlogger(jtable.class                     .getname()).log(java.util.logging.level.severe, null, ex);         }         //</editor-fold>          /* create , display form */         java.awt.eventqueue.invokelater(new runnable() {             public void run() {                 new jtable().setvisible(true);             }         });     }  } 

your problem months global, want local variable. if edit variable somewhere, every object using (like rows or table) reflect changes.

you move months somewhere inside methods have local access, this:

button.addactionlistener(new actionlistener() {     @override     public void actionperformed(actionevent e) {         model.addrow(months());     } }); 

and then, modify month method:

public object[] month() {     list<string> months = new arraylist<>();     if (chkjan.isselected()) {         months.add("january");     } else ...     ...     return new object[]{months}; } 

another thing, practice name variables in lowercase months months, , name methods more readable getselectedmonths , last, confusing name class jtable since there's similar name (jtable).

edit

after checking again, guess many of code redundant, remove , optimize since need month returns.


Comments

Popular posts from this blog

yii2 - Yii 2 Running a Cron in the basic template -

asp.net - 'System.Web.HttpContext' does not contain a definition for 'GetOwinContext' Mystery -

wso2esb - How to concatenate JSON array values in WSO2 ESB? -