【问题标题】:JFrame data is gone when the frame is minimized当框架最小化时,JFrame 数据消失了
【发布时间】:2014-03-22 05:02:16
【问题描述】:

我正在为此开发一个 Java JFrame 应用程序

  1. JTextField
  2. JTable

其中文本字段的数据存储在数据库中并通过表格显示出来。

它成功地显示来自数据库的数据。但问题是当我最小化框架时,表格数据每次都会消失。是否有任何选项可以显示数据,即使用户最小化框架?

或者,有没有其他方法可以解决这个问题?

代码:

public void insertTaskDetail(){
    global.dbConnect();
    String insertkeydetail = "{call sp_inserttaskdetail(?,?,?,?)}";
    try{
        CallableStatement callableStatement;
        callableStatement = global.con.prepareCall(insertkeydetail);
        System.out.println("Stored Procedure Insert Key Detail is Called");
        String dt=global.getCurrentDateTime();
        System.out.println(dt);
        callableStatement.setString("p1", jText_Task_Name.getText().toString());
        callableStatement.setString("p2", dt);
        callableStatement.setString("p3", "0");
        callableStatement.setString("p4", L_Id);
        callableStatement.executeUpdate();
        System.out.println("Task Detail is successfully inserted in database");
        global.con.commit();
        showtask();
    }catch (Exception e){
        System.out.println("Sql Exception Add Task Changed:"+e.toString());
    }
}

public void showtask(){
    global.dbConnect();
    String showtask = "{call sp_showtask(?,?)}";
    try{
        callableStatement = global.con.prepareCall(showtask, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
        System.out.println("Stored Procedure Get Task Detail is Called");
        callableStatement.setString("p1", L_Id);
        callableStatement.setString("p2", "false");
        rs=callableStatement.executeQuery();
        System.out.println(rs.toString());
        //Task , Start Time , Finish Time , Completed
        String task, st;
        boolean cmp;
        int i=0;
        while(rs.next()){
            i++;
        }

        data=new Object[i][];
        int j=0;
        rs.first();
        if(i>0){
            do{
                System.out.println(i);
                task=rs.getString("Task");
                System.out.println(task);
                st=rs.getString("Start Time");
                cmp=rs.getBoolean("Completed");
                data[j] = new Object[]{task, st, cmp};
                j++;
            }while(rs.next());
        }
    }catch (SQLException e){
        System.out.println("Sql Exception:"+e.toString());
    }
    jText_Task_Name.setText("");
    TableDataModel();
}

public void TableDataModel(){
    String[] cols = {"<html>Task<br>Name</html>", "<html>Start<br>Time</html>", "Finished"};
    model = new DefaultTableModel(data, cols){
        @Override
        public Class<?> getColumnClass(int col){
            return col == 2 ? Boolean.class : String.class;
        }

        @Override
        public boolean isCellEditable(int row, int column){
            return column==2 ? true : false;
        }
    };

    table = new JTable(model){
        @Override
        public boolean isCellEditable(int row, int column) {
            return column==2 ? true : false;
        }
    };

    table.setFont(new java.awt.Font("Times New Roman", 0, 14));
    table.getTableHeader().setFont(new java.awt.Font("Times New Roman", 0, 14));
    table.getTableHeader().enable(false);

    JCheckBox jcheckBox=new JCheckBox();
    TableColumnModel columnModel = table.getColumnModel();
    System.out.println("Column Model:"+columnModel.toString());
    columnModel.getColumn(2).setCellEditor(new DefaultCellEditor(jcheckBox));

    jcheckBox.addChangeListener(new ChangeListener(){
        @Override
        public void stateChanged(ChangeEvent e){
            int rowCount = model.getRowCount();
            for(int i=0; i<rowCount; i++){
                Boolean selected = (Boolean)model.getValueAt(i, 2);
                if(selected != null && selected){
                    System.out.println("Removed:"+i);
                    model.removeRow(i);
                    i--;
                }
            }
        }
    });

    JScrollPane jScrollpane=new JScrollPane(table);
    jScrollpane.setViewportView(table);
    this.add(jScrollpane);
    jScrollpane.setFont(new java.awt.Font("Times New Roman", 0, 14));
    jScrollpane.setBounds(10, 130, 295, 190);

    call++;
}

【问题讨论】:

  • 如果没有可运行的示例来演示您的问题,那么任何人都无能为力...
  • 好的,等我贴出代码
  • 请看我编辑的问题
  • 注意:无法编译的代码 sn -p != 可运行示例。为了尽快获得更好的帮助,请发布MCTaRE(最小的完整测试和可读示例)。硬编码一些数据来替换数据库。
  • public void TableDataModel() 请学习常见的Java naming conventions(特别是用于名称的大小写)用于类、方法和属性名称并一致地使用它们。

标签: java swing jtable jframe jtextfield


【解决方案1】:

根据您的示例,我认为您使用的是 null 布局管理器,这就是您遇到问题的原因。

使用适当的layout managers 并让它为您处理

【讨论】:

    猜你喜欢
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 2013-07-08
    • 2021-08-12
    • 1970-01-01
    • 2014-07-10
    相关资源
    最近更新 更多