0

MySQLデータベースに接続し、selectステートメントを使用してJTableを介してステータスが「O」の行を表示するJavaアプリケーションがあります。選択した行をクリックすると、その行の詳細が別のGUIフォームに表示されるように、マウスイベントを追加しました。新しいフォームでのマウスイベントの後、データベーステーブルはステータス「R」に更新されます。JTableの元の表示に戻ると、行が表示されなくなると思います。ただし、以前に選択した行がまだJTableに表示されているので、JTableを更新して更新するには、プログラム全体を終了する必要があります。

テーブルのステータスが「R」に更新され、使用されています

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

各フォームからナビゲートします。データベース接続を更新して、表示GUIに戻ると、変更されたステータスを使用してテーブルが更新されるようにする方法はありますか?

このコードを使用して表示します:

public class ReceiveOrderedParts extends JFrame{
static Vector<Vector<String>> data = new Vector<Vector<String>>();
static JTable table;
ReceiveOrderedParts(final String st) throws InterruptedException, SQLException{             
    super("Order Details Inquiry");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel topPanel = new JPanel();

    getContentPane().add(topPanel, BorderLayout.PAGE_START);

    Vector<String> headers = new Vector<String>();
    headers.add("Order Number");
    headers.add("Date");       
    headers.add("Part Number");
    headers.add("Part Name");
    headers.add("Application");
    headers.add("Quantity");  
    headers.add("Total Cost");
    headers.add("Supplier");                       
    headers.add("Country");

    getData();

    //this is the model which contain actual body of JTable
    DefaultTableModel model = new DefaultTableModel(data, headers);
    table = new JTable(model);
    table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);       
    //table.enable(false);
    table.addMouseListener(new ReceiveOrderedParts.MyMouseAdapter());
    boolean b = table.isCellEditable(WIDTH, WIDTH);
    b = false;

    header_size();

    JScrollPane scroll = new JScrollPane(table);

    scroll.setHorizontalScrollBarPolicy(
            JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    scroll.setVerticalScrollBarPolicy(
            JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

    getContentPane().add(scroll, BorderLayout.PAGE_START);

    pack();
    setResizable(false);
    setVisible(true);
    setSize(1000, 700);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public class MyMouseAdapter extends MouseAdapter  {

    public void mousePressed(MouseEvent e)  {         
            int colIdx = table.columnAtPoint(e.getPoint());                
            int rowIdx = table.rowAtPoint(e.getPoint());
           Object obj = table.getModel().getValueAt(rowIdx, colIdx) ;
              String order = obj.toString();                
            JOptionPane.showMessageDialog(null,"Receive Order "+ order + "?", "Success",
                        JOptionPane.INFORMATION_MESSAGE);
                   // return;
        try {
            SelectOrder seo = new SelectOrder(order);
            seo.setVisible(true);
            setVisible(false);
        } catch (InterruptedException ex) {
            Logger.getLogger(ReceiveOrderedParts.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

}

/**
 * Setting the particular Column Size in JTable
 */
public static void header_size() {
    TableColumn column = table.getColumnModel().getColumn(0);
    column.setPreferredWidth(100);

    column = table.getColumnModel().getColumn(1);
    column.setPreferredWidth(100);
}

/**
 * Fetching Data From MySql Database and storing in a Vector of a Vector to
 * Display in JTable
 */
private static void getData() throws SQLException {
    // Enter Your MySQL Database Table name in below Select Query.
    String str = "select order_number, Part_number, spare_desc, vehicle_app, qnty_ordered,"
            + "seller_name, total_purchases, country, order_date from order_details_table where status = 'O'";
    Connection cn = null;
    ResultSet rs;
    Statement st;

    try {
        // Change the database name, hosty name, 
        // port and password as per MySQL installed in your PC.
        cn = DriverManager.getConnection("jdbc:mysql://"
                + "localhost:3306/test", "root", "gatungo@123");
        st = cn.createStatement();

        rs = st.executeQuery(str);

        while (rs.next()) {
            Vector<String> d = new Vector<String>();

            d.add(rs.getString("order_number"));
            d.add(rs.getString("order_date"));                
            d.add(rs.getString("Part_number"));
            d.add(rs.getString("spare_desc"));
            d.add(rs.getString("vehicle_app"));
            d.add(rs.getString("qnty_ordered"));  
            d.add(rs.getString("total_purchases"));
            d.add(rs.getString("seller_name"));                                                
            d.add(rs.getString("country"));

            d.add("\n\n\n\n\n\n\n");
            data.add(d);

        }
        cn.close();

    } catch (SQLException e) {

        e.printStackTrace();

    }
}
}

このコードに戻ります。

Connection conn = null;
String url = "jdbc:mysql://localhost:3306/";
String db = "test";
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver);
conn = DriverManager.getConnection(url + db, "user", "password");
Statement st = conn.createStatement();
String partno = tpart.getText();
String sparedesc = tdesc.getText();
String vapp = tapp.getText();
String qunty = tqnty.getText();
String costper = tcost.getText();
String country = tcountry.getText();
String retail = tretail.getText();
String store = tstore.getText();
String location = tlocation.getText();
String rdate = trdate.getText();
String storeit = "INSERT INTO Store_info_table (Part_number, spare_desc, vehicle_app, qnty_received, cost_per_unit"
        + ", selling_price, country, store_name, store_location, recvd_date) "
        + "VALUES ('" + partno + "', '" + sparedesc + "', '" + vapp + "', '" + qunty + "', '" + costper + "','" + retail + "','" + country + "','" + store + "','" + location + "','" + rdate + "' )";
st.execute(storeit);

String updateOrder = "UPDATE order_details_table set status = 'R' where order_number = '" + order + "'";
st.execute(updateOrder);

JOptionPane.showMessageDialog(null,"Item Stored Successfully", "Success",
        JOptionPane.INFORMATION_MESSAGE);
conn.close();

ReceiveOrderedParts rop = new ReceiveOrderedParts(order);
rop.invalidate();
rop.setVisible(true);
setVisible(false);                        
4

1 に答える 1

1

observer patternこの状況を処理するために実装を検討する必要があります。したがって、新しいフォームのデータが更新されると、通知が送信され、データベースから新しい値をフェッチすることによって元のテーブルが更新されます。

于 2012-08-02T15:32:28.080 に答える