第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在 JMenuItem 單擊上保存 JTable 數(shù)據(jù)

如何在 JMenuItem 單擊上保存 JTable 數(shù)據(jù)

蕪湖不蕪 2022-04-28 17:05:36
我已經(jīng)擁有的是一個(gè)JTable附有MyTableModel表格模型的表格。我有一種在修改表格單元格時(shí)tableChanged()將表格數(shù)據(jù)寫入data.csv文件的方法。這意味著每次用戶輸入新數(shù)據(jù)時(shí)都會(huì)將表數(shù)據(jù)寫入文件。相反,我希望有一個(gè)菜單項(xiàng),用戶單擊“保存”,然后繼續(xù)執(zhí)行保存到文件的代碼。@Overridepublic void tableChanged(TableModelEvent e) {    int row = e.getFirstRow();    int column = e.getColumn();    TableModel model = (TableModel) e.getSource();    String columnName = model.getColumnName(column);    Object data = model.getValueAt(row, column);    BufferedWriter bw = null;    FileWriter fw = null;    String rivi = "";    try {        fw = new FileWriter("data.csv");        bw = new BufferedWriter(fw);        for (int i = 0; i < model.getRowCount(); i++) {            for (int j = 0; j < model.getColumnCount(); j++) {                if (j == 69) {                    rivi += model.getValueAt(i, j);                } else {                    rivi += model.getValueAt(i, j) + ",";                }            }            if (i != 69) {                rivi += "\n";            }        }        bw.write(rivi);    } catch (Exception ex) {        ex.printStackTrace();    } finally {        try {            if (bw != null) {                bw.close();            }            if (fw != null) {                fw.close();            }        } catch (Exception ex) {            ex.printStackTrace();        }    }}假設(shè)我理解正確,我需要的是將文件保存代碼從tableChanged()方法移動(dòng)到actionPerformed()方法,但我不知道如何TableModelEvent e從方法中獲取參數(shù)tableChanged()并在方法中使用它actionPerformed(),以便我可以獲得表數(shù)據(jù)通過TableModel model = (TableModel) e.getSource()并將其保存到文件中。@Overridepublic void actionPerformed(ActionEvent e) {    // File saving code here?}
查看完整描述

1 回答

?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

您的代碼正在運(yùn)行,而您的問題更為基本——您正在創(chuàng)建太多DesktopEsimerkki對(duì)象,其中一個(gè)您正在更改其值,而另一個(gè)您正在顯示其值。改變這個(gè):


    JFrame frame = new JFrame("DesktopEsimerkki");

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    // this guy creates the menu

    DesktopEsimerkki desim = new DesktopEsimerkki();

    frame.setJMenuBar(desim.luoValikkoPalkki());


    // but this separate guy is used as the GUI

    DesktopEsimerkki newContentPane = new DesktopEsimerkki();

    newContentPane.setOpaque(true);

    frame.setContentPane(newContentPane);

對(duì)此:


    JFrame frame = new JFrame("DesktopEsimerkki");

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    // use only one instance for **both**

    DesktopEsimerkki desim = new DesktopEsimerkki();

    frame.setJMenuBar(desim.luoValikkoPalkki());


    // DesktopEsimerkki newContentPane = new DesktopEsimerkki();

    // newContentPane.setOpaque(true);

    // frame.setContentPane(newContentPane);


    // *********** here ***********

    frame.setContentPane(desim);

只是為了笑,我創(chuàng)建了自己的程序來執(zhí)行此操作,例如:

http://img1.sycdn.imooc.com//626a58fc00018ea408060324.jpg

import java.awt.BorderLayout;

import java.awt.Component;

import java.awt.event.ActionEvent;

import java.awt.event.KeyEvent;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileWriter;

import java.io.IOException;

import java.util.Formatter;

import java.util.Scanner;


import javax.swing.*;

import javax.swing.table.DefaultTableCellRenderer;

import javax.swing.table.DefaultTableModel;


@SuppressWarnings("serial")

public class TableFun extends JPanel {

    public static final String DATA_FILE_PATH = "data.csv";

    private MyTableModel model = new MyTableModel();

    private JTable table = new JTable(model);

    private JTextField fileNameField = new JTextField(DATA_FILE_PATH, 30);

    private JMenuBar menuBar;

    private Action writeModelAction = new WriteModelAction(table, "Write to File", this);

    private Action readModelAction = new ReadModelAction(table, "Read from File", this);


    public TableFun() {

        JPanel btnPanel = new JPanel();

        btnPanel.add(new JLabel("File:"));

        btnPanel.add(fileNameField);

        btnPanel.add(new JButton(writeModelAction));

        btnPanel.add(new JButton(readModelAction));


        table.getColumnModel().getColumn(0).setCellRenderer(new TimeColumnRenderer());

        JScrollPane scrollpane = new JScrollPane(table);

        setLayout(new BorderLayout());

        add(scrollpane);

        add(btnPanel, BorderLayout.PAGE_START);

    }


    public String getFileName() {

        return fileNameField.getText();

    }


    public JMenuBar getMenuBar() {

        if (menuBar == null) {

            menuBar = new JMenuBar();

            JMenu fileMenu = new JMenu("File");

            fileMenu.setMnemonic(KeyEvent.VK_F);

            menuBar.add(fileMenu);


            fileMenu.add(new JMenuItem(readModelAction));

            fileMenu.add(new JMenuItem(writeModelAction));

        }

        return menuBar;

    }    


    private static void createAndShowGui() {

        TableFun mainPanel = new TableFun();


        JFrame frame = new JFrame("TableFun");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.getContentPane().add(mainPanel);

        frame.setJMenuBar(mainPanel.getMenuBar());

        frame.pack();

        frame.setLocationRelativeTo(null);

        frame.setVisible(true);

    }


    public static void main(String[] args) {

        SwingUtilities.invokeLater(() -> createAndShowGui());

    }

}


@SuppressWarnings("serial")

class WriteModelAction extends AbstractAction {

    private ReadWriteTableData readWriteTableData;

    private TableFun tableFun;


    public WriteModelAction(JTable table, String name, TableFun tableFun) {

        super(name);

        int mnemonic = name.charAt(0);

        putValue(MNEMONIC_KEY, mnemonic);

        readWriteTableData = new ReadWriteTableData(table);

        this.tableFun = tableFun;

    }


    @Override

    public void actionPerformed(ActionEvent e) {

        File file = new File(tableFun.getFileName());

        if (file.exists()) {

            String message = "File " + tableFun.getFileName() + " already exists -- do you wish to overrite?";

            String title = "File Already Exists";

            int optionType = JOptionPane.YES_NO_OPTION;

            int response = JOptionPane.showConfirmDialog(tableFun, message, title, optionType);

            if (response != JOptionPane.YES_OPTION) {

                return;

            }

        }

        try {

            readWriteTableData.write(file);

        } catch (IOException e1) {

            e1.printStackTrace();

        }

    }

}

@SuppressWarnings("serial")

class ReadModelAction extends AbstractAction {

    private ReadWriteTableData readWriteTableData;

    private TableFun tableFun;


    public ReadModelAction(JTable table, String name, TableFun tableFun) {

        super(name);

        int mnemonic = name.charAt(0);

        putValue(MNEMONIC_KEY, mnemonic);

        readWriteTableData = new ReadWriteTableData(table);

        this.tableFun = tableFun;

    }


    @Override

    public void actionPerformed(ActionEvent e) {

        File file = new File(tableFun.getFileName());

        if (!file.exists()) {

            String message = "File " + tableFun.getFileName() + " cannot be found -- aborting read";

            String title = "File Cannot Be Found";

            int optionType = JOptionPane.WARNING_MESSAGE;

            JOptionPane.showMessageDialog(tableFun, message, title, optionType);

            return;

        }

        try {

            readWriteTableData.read(file);

        } catch (IOException e1) {

            e1.printStackTrace();

        }

    }

}

class ReadWriteTableData {

    private JTable table;


    public ReadWriteTableData(JTable table) {

        this.table = table;

    }


    public void read(File file) throws FileNotFoundException {

        MyTableModel tableModel = (MyTableModel) table.getModel();

        tableModel.setRowCount(0);

        Scanner scanner = new Scanner(file);

        while (scanner.hasNextLine()) {

            String line = scanner.nextLine().trim();

            if (!line.isEmpty()) {

                String[] tokens = line.split("\\|");

                String[] trimmedTokens = new String[tokens.length];

                for (int i = 0; i < tokens.length; i++) {

                    String text = tokens[i];

                    if (text == null || text.trim().equals("null")) {

                        text = "";

                    } else {

                        text = text.trim();

                    }

                    trimmedTokens[i] = text;

                }

                tableModel.addRow(trimmedTokens);

            }

        }

        table.setModel(tableModel);

        scanner.close();

    }


    public void write(File file) throws IOException {

        FileWriter fileWriter = new FileWriter(file);

        Formatter formatter = new Formatter(fileWriter);

        MyTableModel model = (MyTableModel) table.getModel();

        for (int row = 0; row < model.getRowCount(); row++) {

            for (int col = 0; col < model.getColumnCount(); col++) {

                String value = (String) model.getValueAt(row, col);

                value = value == null ? "" : value;

                formatter.format("%25s ", value);

                if (col != model.getColumnCount() - 1) {

                    formatter.format(" | ");

                }

            }

            formatter.format("%n");

        }

        if (formatter != null) {

            formatter.close();

        }        

    }


}

class MyTableModel extends DefaultTableModel {

    public static final String[] COLUMNS = {"Time", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};

    private static final int START_TIME = 8;

    private static final int END_TIME = 17;


    public MyTableModel() {

        super(COLUMNS, 0);

        for (int i = START_TIME; i < END_TIME + 1; i++) {

            Object[] rowData = {String.valueOf(i), "", "", "", "", ""};

            addRow(rowData);

        }

    }


    @Override

    public boolean isCellEditable(int row, int column) {

        return column != 0;

    }

}

class TimeColumnRenderer extends DefaultTableCellRenderer {

    public TimeColumnRenderer() {

        setHorizontalAlignment(SwingConstants.TRAILING);

    }


    @Override

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,

            boolean hasFocus, int row, int column) {

        int time = Integer.parseInt(value.toString());

        time = time > 12 ? time % 12 : time;

        String timeText = String.format("%d:00", time);

        return super.getTableCellRendererComponent(table, timeText, isSelected, hasFocus, row, column);

    }

}

它使用管道符號(hào)|作為 csv 分隔符,因此典型的文本文件可能如下所示:


                8  |                            |                      judy  |                            |                            |                           

                9  |                      John  |                            |                      Bill  |                            |                     Frank 

               10  |                            |                     Hello  |                            |                   Goodbye  |                           

               11  |               Donald duck  |               Frank Nitti  |                 Al Capone  |                   Johnson  |                           

               12  |                            |                            |                            |                            |                        ss 

               13  |                            |                            |                            |                            |                           

               14  |              Bill Clinton  |              Donald Trump  |                     Hello  |                     Fresh  |                           

               15  |                            |                  What the  |                      heck  |                            |                       Yes 

               16  |                            |                            |                            |                            |                           

               17  |                      Here  |                        we  |             


查看完整回答
反對(duì) 回復(fù) 2022-04-28
  • 1 回答
  • 0 關(guān)注
  • 211 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)