0

現在の日付で名前、支店、都市を含む請求書番号を生成しようとしています。JComboboxes と SimpleDateFormat から情報を収集しました。しかし、最終的に、すべての値を連結して Jtextfield に設定した後、文字列インデックスが範囲外の例外を取得します。

私はJavaが初めてで、Javaについてあまり知識がありません。これに対して私が行った努力は次のとおりです。私をサポートしてくれることに関心のある人々に感謝します。ブーツもブーケも大歓迎です。

private void bt_generateActionPerformed(java.awt.event.ActionEvent evt) {
    if (evt.getSource() == bt_generate) {

        if ((cb_bkname.getSelectedItem()
                .equals("<html><font color=\"red\">SELECT NAME</font></html>"))
            || (cb_brname.getSelectedItem()
                .equals("<html><font color=\"red\">SELECT BRANCH</font></html>"))
            || (cb_plname.getSelectedItem()
                .equals("<html><font color=\"red\">SELECT PLACE</font></html>"))
        ){

        } else {
            String datePrefix = new SimpleDateFormat("MMMM dd, YYYY")
                    .format(new Date());
            tf_rm_dt.setText(datePrefix);
            Object name = cb_bkname.getSelectedItem();
            String bn = name.toString().substring(0, 3);
            Object branch = cb_brname.getSelectedItem();
            String br = branch.toString().substring(0, 4);
            Object city = cb_bkname.getSelectedItem();
            String pl = city.toString().substring(0, 4);
            String curdt = new SimpleDateFormat("dd-MM-YY")
                    .format(new Date());
            tf_rm_id.setText("" + bn + "/" + br + "/" + "/" + curdt);
        }
    }

}

スタック トレースは次のとおりです。

run:
Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
    at java.lang.String.substring(String.java:1955)
    at myproj.DATAENTRY.bt_generateActionPerformed(DATAENTRY.java:2215)
    at myproj.DATAENTRY.access$2300(DATAENTRY.java:20)
    at myproj.DATAENTRY$24.actionPerformed(DATAENTRY.java:597)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
4

2 に答える 2

1

あなたの文字列の1つは短くなります:

エラーは、これらの 3 行のいずれかにあります

String bn=name.toString().substring(0, 3);
String br=branch.toString().substring(0, 4);
String pl=city.toString().substring(0, 4);

文字列を出力し、substring() を実行する前に長さを確認します

于 2013-01-29T12:56:04.217 に答える
0

これは、コンボ ボックスから情報を取得するための非効率的で非常に複雑な手段です。連結の前に、選択をオブジェクトに (たとえば、列挙型として) 割り当てることはできませんか? 選択が何であるかを知っている場合 (できれば知っているでしょう)、部分文字列を使用する必要はありません!

于 2013-01-29T13:14:36.667 に答える