猿问

如何在 JMenuItem 单击上保存 JTable 数据

我已经拥有的是一个JTable附有MyTableModel表格模型的表格。我有一种在修改表格单元格时tableChanged()将表格数据写入data.csv文件的方法。这意味着每次用户输入新数据时都会将表数据写入文件。相反,我希望有一个菜单项,用户单击“保存”,然后继续执行保存到文件的代码。


@Override

public 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();

        }

    }


}

假设我理解正确,我需要的是将文件保存代码从tableChanged()方法移动到actionPerformed()方法,但我不知道如何TableModelEvent e从方法中获取参数tableChanged()并在方法中使用它actionPerformed(),以便我可以获得表数据通过TableModel model = (TableModel) e.getSource()并将其保存到文件中。


@Override

public void actionPerformed(ActionEvent e) {

    // File saving code here?

}


芜湖不芜
浏览 200回答 1
1回答

手掌心

您的代码正在运行,而您的问题更为基本——您正在创建太多DesktopEsimerkki对象,其中一个您正在更改其值,而另一个您正在显示其值。改变这个:&nbsp; &nbsp; JFrame frame = new JFrame("DesktopEsimerkki");&nbsp; &nbsp; frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&nbsp; &nbsp; // this guy creates the menu&nbsp; &nbsp; DesktopEsimerkki desim = new DesktopEsimerkki();&nbsp; &nbsp; frame.setJMenuBar(desim.luoValikkoPalkki());&nbsp; &nbsp; // but this separate guy is used as the GUI&nbsp; &nbsp; DesktopEsimerkki newContentPane = new DesktopEsimerkki();&nbsp; &nbsp; newContentPane.setOpaque(true);&nbsp; &nbsp; frame.setContentPane(newContentPane);对此:&nbsp; &nbsp; JFrame frame = new JFrame("DesktopEsimerkki");&nbsp; &nbsp; frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&nbsp; &nbsp; // use only one instance for **both**&nbsp; &nbsp; DesktopEsimerkki desim = new DesktopEsimerkki();&nbsp; &nbsp; frame.setJMenuBar(desim.luoValikkoPalkki());&nbsp; &nbsp; // DesktopEsimerkki newContentPane = new DesktopEsimerkki();&nbsp; &nbsp; // newContentPane.setOpaque(true);&nbsp; &nbsp; // frame.setContentPane(newContentPane);&nbsp; &nbsp; // *********** here ***********&nbsp; &nbsp; frame.setContentPane(desim);只是为了笑,我创建了自己的程序来执行此操作,例如: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 {&nbsp; &nbsp; public static final String DATA_FILE_PATH = "data.csv";&nbsp; &nbsp; private MyTableModel model = new MyTableModel();&nbsp; &nbsp; private JTable table = new JTable(model);&nbsp; &nbsp; private JTextField fileNameField = new JTextField(DATA_FILE_PATH, 30);&nbsp; &nbsp; private JMenuBar menuBar;&nbsp; &nbsp; private Action writeModelAction = new WriteModelAction(table, "Write to File", this);&nbsp; &nbsp; private Action readModelAction = new ReadModelAction(table, "Read from File", this);&nbsp; &nbsp; public TableFun() {&nbsp; &nbsp; &nbsp; &nbsp; JPanel btnPanel = new JPanel();&nbsp; &nbsp; &nbsp; &nbsp; btnPanel.add(new JLabel("File:"));&nbsp; &nbsp; &nbsp; &nbsp; btnPanel.add(fileNameField);&nbsp; &nbsp; &nbsp; &nbsp; btnPanel.add(new JButton(writeModelAction));&nbsp; &nbsp; &nbsp; &nbsp; btnPanel.add(new JButton(readModelAction));&nbsp; &nbsp; &nbsp; &nbsp; table.getColumnModel().getColumn(0).setCellRenderer(new TimeColumnRenderer());&nbsp; &nbsp; &nbsp; &nbsp; JScrollPane scrollpane = new JScrollPane(table);&nbsp; &nbsp; &nbsp; &nbsp; setLayout(new BorderLayout());&nbsp; &nbsp; &nbsp; &nbsp; add(scrollpane);&nbsp; &nbsp; &nbsp; &nbsp; add(btnPanel, BorderLayout.PAGE_START);&nbsp; &nbsp; }&nbsp; &nbsp; public String getFileName() {&nbsp; &nbsp; &nbsp; &nbsp; return fileNameField.getText();&nbsp; &nbsp; }&nbsp; &nbsp; public JMenuBar getMenuBar() {&nbsp; &nbsp; &nbsp; &nbsp; if (menuBar == null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; menuBar = new JMenuBar();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JMenu fileMenu = new JMenu("File");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fileMenu.setMnemonic(KeyEvent.VK_F);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; menuBar.add(fileMenu);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fileMenu.add(new JMenuItem(readModelAction));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fileMenu.add(new JMenuItem(writeModelAction));&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return menuBar;&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; private static void createAndShowGui() {&nbsp; &nbsp; &nbsp; &nbsp; TableFun mainPanel = new TableFun();&nbsp; &nbsp; &nbsp; &nbsp; JFrame frame = new JFrame("TableFun");&nbsp; &nbsp; &nbsp; &nbsp; frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&nbsp; &nbsp; &nbsp; &nbsp; frame.getContentPane().add(mainPanel);&nbsp; &nbsp; &nbsp; &nbsp; frame.setJMenuBar(mainPanel.getMenuBar());&nbsp; &nbsp; &nbsp; &nbsp; frame.pack();&nbsp; &nbsp; &nbsp; &nbsp; frame.setLocationRelativeTo(null);&nbsp; &nbsp; &nbsp; &nbsp; frame.setVisible(true);&nbsp; &nbsp; }&nbsp; &nbsp; public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp; SwingUtilities.invokeLater(() -> createAndShowGui());&nbsp; &nbsp; }}@SuppressWarnings("serial")class WriteModelAction extends AbstractAction {&nbsp; &nbsp; private ReadWriteTableData readWriteTableData;&nbsp; &nbsp; private TableFun tableFun;&nbsp; &nbsp; public WriteModelAction(JTable table, String name, TableFun tableFun) {&nbsp; &nbsp; &nbsp; &nbsp; super(name);&nbsp; &nbsp; &nbsp; &nbsp; int mnemonic = name.charAt(0);&nbsp; &nbsp; &nbsp; &nbsp; putValue(MNEMONIC_KEY, mnemonic);&nbsp; &nbsp; &nbsp; &nbsp; readWriteTableData = new ReadWriteTableData(table);&nbsp; &nbsp; &nbsp; &nbsp; this.tableFun = tableFun;&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; public void actionPerformed(ActionEvent e) {&nbsp; &nbsp; &nbsp; &nbsp; File file = new File(tableFun.getFileName());&nbsp; &nbsp; &nbsp; &nbsp; if (file.exists()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String message = "File " + tableFun.getFileName() + " already exists -- do you wish to overrite?";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String title = "File Already Exists";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int optionType = JOptionPane.YES_NO_OPTION;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int response = JOptionPane.showConfirmDialog(tableFun, message, title, optionType);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (response != JOptionPane.YES_OPTION) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; readWriteTableData.write(file);&nbsp; &nbsp; &nbsp; &nbsp; } catch (IOException e1) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e1.printStackTrace();&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}@SuppressWarnings("serial")class ReadModelAction extends AbstractAction {&nbsp; &nbsp; private ReadWriteTableData readWriteTableData;&nbsp; &nbsp; private TableFun tableFun;&nbsp; &nbsp; public ReadModelAction(JTable table, String name, TableFun tableFun) {&nbsp; &nbsp; &nbsp; &nbsp; super(name);&nbsp; &nbsp; &nbsp; &nbsp; int mnemonic = name.charAt(0);&nbsp; &nbsp; &nbsp; &nbsp; putValue(MNEMONIC_KEY, mnemonic);&nbsp; &nbsp; &nbsp; &nbsp; readWriteTableData = new ReadWriteTableData(table);&nbsp; &nbsp; &nbsp; &nbsp; this.tableFun = tableFun;&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; public void actionPerformed(ActionEvent e) {&nbsp; &nbsp; &nbsp; &nbsp; File file = new File(tableFun.getFileName());&nbsp; &nbsp; &nbsp; &nbsp; if (!file.exists()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String message = "File " + tableFun.getFileName() + " cannot be found -- aborting read";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String title = "File Cannot Be Found";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int optionType = JOptionPane.WARNING_MESSAGE;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JOptionPane.showMessageDialog(tableFun, message, title, optionType);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; readWriteTableData.read(file);&nbsp; &nbsp; &nbsp; &nbsp; } catch (IOException e1) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e1.printStackTrace();&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}class ReadWriteTableData {&nbsp; &nbsp; private JTable table;&nbsp; &nbsp; public ReadWriteTableData(JTable table) {&nbsp; &nbsp; &nbsp; &nbsp; this.table = table;&nbsp; &nbsp; }&nbsp; &nbsp; public void read(File file) throws FileNotFoundException {&nbsp; &nbsp; &nbsp; &nbsp; MyTableModel tableModel = (MyTableModel) table.getModel();&nbsp; &nbsp; &nbsp; &nbsp; tableModel.setRowCount(0);&nbsp; &nbsp; &nbsp; &nbsp; Scanner scanner = new Scanner(file);&nbsp; &nbsp; &nbsp; &nbsp; while (scanner.hasNextLine()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String line = scanner.nextLine().trim();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!line.isEmpty()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String[] tokens = line.split("\\|");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String[] trimmedTokens = new String[tokens.length];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i < tokens.length; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String text = tokens[i];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (text == null || text.trim().equals("null")) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text = "";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text = text.trim();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; trimmedTokens[i] = text;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tableModel.addRow(trimmedTokens);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; table.setModel(tableModel);&nbsp; &nbsp; &nbsp; &nbsp; scanner.close();&nbsp; &nbsp; }&nbsp; &nbsp; public void write(File file) throws IOException {&nbsp; &nbsp; &nbsp; &nbsp; FileWriter fileWriter = new FileWriter(file);&nbsp; &nbsp; &nbsp; &nbsp; Formatter formatter = new Formatter(fileWriter);&nbsp; &nbsp; &nbsp; &nbsp; MyTableModel model = (MyTableModel) table.getModel();&nbsp; &nbsp; &nbsp; &nbsp; for (int row = 0; row < model.getRowCount(); row++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int col = 0; col < model.getColumnCount(); col++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String value = (String) model.getValueAt(row, col);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; value = value == null ? "" : value;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; formatter.format("%25s ", value);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (col != model.getColumnCount() - 1) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; formatter.format(" | ");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; formatter.format("%n");&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; if (formatter != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; formatter.close();&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; }}class MyTableModel extends DefaultTableModel {&nbsp; &nbsp; public static final String[] COLUMNS = {"Time", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};&nbsp; &nbsp; private static final int START_TIME = 8;&nbsp; &nbsp; private static final int END_TIME = 17;&nbsp; &nbsp; public MyTableModel() {&nbsp; &nbsp; &nbsp; &nbsp; super(COLUMNS, 0);&nbsp; &nbsp; &nbsp; &nbsp; for (int i = START_TIME; i < END_TIME + 1; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Object[] rowData = {String.valueOf(i), "", "", "", "", ""};&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addRow(rowData);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; public boolean isCellEditable(int row, int column) {&nbsp; &nbsp; &nbsp; &nbsp; return column != 0;&nbsp; &nbsp; }}class TimeColumnRenderer extends DefaultTableCellRenderer {&nbsp; &nbsp; public TimeColumnRenderer() {&nbsp; &nbsp; &nbsp; &nbsp; setHorizontalAlignment(SwingConstants.TRAILING);&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boolean hasFocus, int row, int column) {&nbsp; &nbsp; &nbsp; &nbsp; int time = Integer.parseInt(value.toString());&nbsp; &nbsp; &nbsp; &nbsp; time = time > 12 ? time % 12 : time;&nbsp; &nbsp; &nbsp; &nbsp; String timeText = String.format("%d:00", time);&nbsp; &nbsp; &nbsp; &nbsp; return super.getTableCellRendererComponent(table, timeText, isSelected, hasFocus, row, column);&nbsp; &nbsp; }}它使用管道符号|作为 csv 分隔符,因此典型的文本文件可能如下所示:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 8&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; judy&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 9&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; John&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Bill&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Frank&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;10&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Hello&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Goodbye&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;11&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Donald duck&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Frank Nitti&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Al Capone&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Johnson&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;12&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ss&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;13&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;14&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Bill Clinton&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Donald Trump&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Hello&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Fresh&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;15&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; What the&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; heck&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Yes&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;16&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;17&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Here&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; we&nbsp; |&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
随时随地看视频慕课网APP

相关分类

Java
我要回答