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
Post a Comment