Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jtable列中的ArrayList_Java_Swing_Jtable - Fatal编程技术网

Java Jtable列中的ArrayList

Java Jtable列中的ArrayList,java,swing,jtable,Java,Swing,Jtable,我正在创建一个Jtable,只有一列(月列),并在button的帮助下在列中添加一个arraylist Arraylist包含月份名称,具体取决于选中的月份 我的问题是,当我添加数组列表时,上一行也会更改 我不知道发生了什么事 这是我解决这个问题的代码 package test; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt

我正在创建一个Jtable,只有一列(月列),并在button的帮助下在列中添加一个arraylist

Arraylist包含月份名称,具体取决于选中的月份

我的问题是,当我添加数组列表时,上一行也会更改

我不知道发生了什么事

这是我解决这个问题的代码

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 to 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 the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (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 and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Jtable().setVisible(true);
            }
        });
    }

}
封装测试;
导入java.awt.BorderLayout;
导入java.awt.FlowLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JButton;
导入javax.swing.JCheckBox;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.table.DefaultTableModel;
公共类Jtable扩展了JFrame{
JTable表;
按钮;
JPanel议员;
默认表格模型;
JCheckBox-chkJan;
JCheckBox-chkFeb;
JCheckBox-chkMarch;
JCheckBox-chkApril;
JCheckBox chkMay;
JCheckBox-chkJun;
JCheckBox chkJuly;
JCheckBox-chkAug;
JCheckBox-chkSep;
JCheckBox-chkOct;
JCheckBox-chkNov;
JCheckBox-chkDec;
列表月份=空;
公共Jtable(){
table=新的JTable();
按钮=新的JButton(“添加到表”);
mp=新的JPanel();
月份=新的ArrayList();
chkJan=新JCheckBox(“JAN”);
chkFeb=新的JCheckBox(“FEB”);
chkMarch=新JCheckBox(“三月”);
chkApril=新JCheckBox(“四月”);
chkMay=新JCheckBox(“五月”);
chkJun=新JCheckBox(“JUN”);
chkJuly=新JCheckBox(“七月”);
chkAug=新JCheckBox(“八月”);
chkSep=新的JCheckBox(“SEP”);
chkOct=新JCheckBox(“OCT”);
chkNov=新的JCheckBox(“NOV”);
chkDec=新JCheckBox(“DEC”);
mp.setLayout(新的FlowLayout(FlowLayout.LEFT));
mp.设置尺寸(300200);
议员增补(chkJan);
mp.add(chkFeb);
议员增补(chkMarch);
mp.add(chkApril);
议员增补(chkMay);
议员增补(chkJun);
议员增补(CHK7月);
议员增补(chkAug);
mp.add(chkSep);
议员增补(chkOct);
议员增补(chkNov);
mp.add(chkDec);
模型=新的DefaultTableModel();
表2.setModel(model);
模型。添加列(“月”);
JScrollPane sp=新的JScrollPane(表);
setLayout(新的BorderLayout());
添加(sp,BorderLayout.CENTER);
添加(按钮,BorderLayout.SOUTH);
添加(mp,BorderLayout.NORTH);
设置大小(800600);
addActionListener(新建ActionListener()){
@凌驾
已执行的公共无效操作(操作事件e){
月份();
对象[]行={Months};
model.addRow(row);
}
});
}
公众假期月{
月。移除所有(月);
如果(chkJan.isSelected()){
月份。添加(“一月”);
}否则{
月。移除(“一月”);
}
if(chkFeb.isSelected()){
月份。添加(“二月”);
}否则{
月。移除(“二月”);
}
if(chkMarch.isSelected()){
月份。添加(“三月”);
}否则{
月。移除(“三月”);
}
if(chkApril.isSelected()){
月份。添加(“四月”);
}否则{
月。移除(“四月”);
}
if(chkMay.isSelected()){
月份。添加(“五月”);
}否则{
月。移除(“五月”);
}
如果(chkJun.isSelected()){
月份。添加(“六月”);
}否则{
月。移除(“六月”);
}
如果(chkJuly.isSelected()){
月。添加(“7月”);
}否则{
月。移除(“七月”);
}
if(chkAug.isSelected()){
月份。添加(“八月”);
}否则{
月。移除(“八月”);
}
if(chkSep.isSelected()){
月。添加(“9月”);
}否则{
月。移除(“九月”);
}
if(chkOct.isSelected()){
月份。添加(“Octuber”);
}否则{
月。移除(“Octuber”);
}
if(chkNov.isSelected()){
月份。添加(“11月”);
}否则{
月。移除(“11月”);
}
if(chkDec.isSelected()){
月份。添加(“12月”);
}否则{
月。移除(“十二月”);
}
}
公共静态void main(字符串参数[]){
/*设置Nimbus的外观和感觉*/
//
/*如果Nimbus(在JavaSE6中引入)不可用,请使用默认的外观。
*详情请参阅http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
*/
试一试{
for(javax.swing.UIManager.LookAndFeelInfo:javax.swing.UIManager.getInstalledLookAndFeels()){
if(“Nimbus”.equals(info.getName())){
setLookAndFeel(info.getClassName());
打破
}
}
}catch(ClassNotFoundException |实例化Exception | IllegalacessException | javax.swing.UnsupportedLookAndFeelException ex){
java.util.logging.Logger.getLogger(Jtable.class
.getName()).log(java.util.logging.Level.SEVERE,null,ex);
}
//
/*创建并显示表单*/
invokeLater(new Runnable()){
公开募捐{
新Jtable().setVisible(true);
}
});
}
}

您的问题是
月份
是全局变量,您需要的是局部变量。如果在某个地方编辑此变量,则使用它的每个对象(如行或表)都将反映其更改

您可以将
Months
移动到方法中只有本地访问权限的某个地方,例如
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        model.addRow(Months());
    }
});
public Object[] Month() {
    List<String> Months = new ArrayList<>();
    if (chkJan.isSelected()) {
        Months.add("January");
    } else ...
    ...
    return new Object[]{Months};
}
public void Month() {
        Months.removeAll(Months);
        ...
public void Month() {
        Months = new ArrayList<>();
        ...