0

mysql データが取り込まれた jtable を含むウィンドウを作成しました。ボタン「LOAD TABLES」もあり、クリックすると Jdialog がポップアップし、ユーザーが JComboBox から別のテーブルを選択できるようになります。すべて正常に動作しますが、JComboBox からテーブルを選択し、Jdialog の [OK] ボタンをクリックすると、JTable が新しいテーブルからデータをロードしない (更新しない) ことが問題です!! 以下は簡略化されたコードです!!

助けてください!!!!

class mysqlData extends JFrame {

Font buttonFont = new Font("Arial",Font.PLAIN, 16);
Font labelfont = new Font("Arial",Font.PLAIN, 24);
Connection connecting;
public String tableName = "Examination";

static final String Select = "Available Mysql Tables";



//connection statements
mysqlData()
    {
        Connections con = new Connections();
        connecting = con.connect;
        System.out.print("value of input is: " + tableName);


    }



    //creating jtable and populating it with data from mysql database
    public JScrollPane dataTable() throws SQLException
    {

        Statement st = connecting.createStatement();
        ResultSet result = st.executeQuery("Select * from " + tableName);
        ResultSetMetaData md = result.getMetaData();
        int columnCount = md.getColumnCount();

        Vector<String> data = new Vector<String>();
        Vector<String> column = new Vector<String>();

        //JOptionPane.showMessageDialog(null,"Wrong username or password" + tableName,"Failed!",JOptionPane.ERROR_MESSAGE);

        DefaultTableModel tablemodel = new DefaultTableModel(data,column);
        tablemodel.setRowCount(0);
        tablemodel.setColumnCount(0);

        for(int i=1; i<=columnCount; i++)
        {
            tablemodel.addColumn(md.getColumnName(i));
        }

        while(result.next())
        {
            Vector<String> row = new Vector<String>(columnCount);

            for(int i=1; i<=columnCount; i++)
            {
                row.add(result.getString(i));
            }

            tablemodel.addRow(row);
        }



        JTable table = new JTable(tablemodel);
        table.setPreferredScrollableViewportSize(new Dimension(900,780));
        JScrollPane scrolPane = new JScrollPane(table);
        return scrolPane;
     }




    //a button that pops up a jdialog and lets users to select a table from jcombo box
    public JButton tablesButton()
    {
        JButton tablesListButton = new JButton("LOAD TABLES");
        tablesListButton.setFont(buttonFont);
        tablesListButton.addActionListener(listener);

        return tablesListButton;
    }



    //actionlistener for the  tablesButton

    ActionListener listener = new ActionListener()
    {
        public void actionPerformed(ActionEvent event)
        {
            String[] tables  = new String[]{"Attendance","Examination","Students","Subjects","Teachers","Salary"};
            tableName = (String) JOptionPane.showInputDialog(mysqlData.this,"Please select your favorite sport",Select, JOptionPane.INFORMATION_MESSAGE, null,tables,"Attendance");


        }
    };

}

4

2 に答える 2

0

コンパイル エラーのため、サンプルをリファクタリングしました。以下のコードは動作するはずです:

    ActionListener listener = new ActionListener() {
    public void actionPerformed(ActionEvent event) {
        String[] tables = new String[] { "Attendance", "Examination", "Students", "Subjects", "Teachers", "Salary" };

        tableName = (String) JOptionPane.showInputDialog(null,
                        "Please select your favorite sport", "Attendance",
                        JOptionPane.INFORMATION_MESSAGE, null,
                        tables, tables[0]);
        JOptionPane.showMessageDialog(null, "You have selected: " + tableName);

        System.out.println("value of input is: " + tableName);
    }
};

今後の参考のために、JOption/InputPane の例を以下に示します:
http://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html

HTH

于 2013-09-01T18:52:55.260 に答える
0

多くのリファクタリングを行う必要があると思います。そのためのヒントをいくつか紹介します。

1)主な問題は、ActionListenerでテーブルが

tableName = (String) JOptionPane.showInputDialog(mysqlData.this,"Please select your favorite sport",Select, JOptionPane.INFORMATION_MESSAGE, null,tables,"Attendance");

あなたはそれで何かをしています、あなたはあなたをリフレッシュしなければなりませんtableModel. もう一度電話する必要があります

Statement st = connecting.createStatement();
        ResultSet result = st.executeQuery("Select * from " + tableName);
        ResultSetMetaData md = result.getMetaData();

そして、あなたは現在のJTableようなものにアクセスする必要があります

DefaultTableModel tableModel = (DefaultTableModel)jtable.getModel();
for(int i=1; i<=columnCount; i++)
        {
            tablemodel.addColumn(md.getColumnName(i));
        }

        while(result.next())
        {
            Vector<String> row = new Vector<String>(columnCount);

            for(int i=1; i<=columnCount; i++)
            {
                row.add(result.getString(i));
            }

            tablemodel.addRow(row);
        }

毎回 jtable の新しいインスタンスを作成する代わりに、モデルを変更するだけです。

于 2013-09-01T19:30:50.723 に答える