JAVA
1public class TEST1 extends JFrame implements ListSelectionListener { 2 3 JList lst0; 4 5 public TEST1() throws Exception { 6 7 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 8 9 setSize(1300, 750); 10 setLayout(null); 11 12 // ボタンの設置 13 button_sakusei(); 14 15 // 画面作成 16 gamen_sakusei(); 17 18 // 空のリストボックスの作成 19 list_sakusei(); 20 21 // 表示する 22 setVisible(true); 23 24 } 25 26 27 //空のリストボックス作成 28 public void list_sakusei() { 29 30 lst0 = new JList(file_name2); 31 lst0.addListSelectionListener(this); 32 lst0.setCellRenderer(new StripedListCellRenderer()); 33 JScrollPane lst1 = new JScrollPane(lst0); 34 lst1.setBounds(240, 150, 470,400); 35 getContentPane().add(lst1); 36 setVisible(true); 37 38 } 39 40 41 public void valueChanged(ListSelectionEvent e) { 42 43 // 初期化 44 for(int i=0;i<5000;i++) { 45 new_flag[i]=0; 46 } 47 48 JList lst0 = (JList)e.getSource(); 49 50 if(lst0.getSelectedValue()!="") { 51 if(lst0.getSelectedValue()!=null) { 52 53 Object lst = lst0.getSelectedValue() ; 54 sentaku_str = lst.toString(); 55 56 //フォルダの一覧を抽出する 57 File file2 = new File(str_saki2); 58 if(!file2.isDirectory()) return; 59 File files[] = file2.listFiles(); 60 file_name = new String[files.length]; 61 for (int i=0; i<files.length; i++) { 62 file_name[i] = files[i].getName(); 63 File item = files[i]; 64 if(item.isDirectory()) { 65 folder[i] = item.getName(); 66 //System.out.println("folder[i]:" + folder[i]); 67 } 68 if (item.isFile()) { 69 name[i] = item.getName(); 70 } 71 } 72 //lst0.setListData(file_name); 73 74 75 for (int i=0; i<files.length; i++) { 76 // フォルダだったら下位フォルダを表示する 77 //ファイルだったら開く 78 } 79 80 //フォルダの一覧を抽出する 81 File file22 = new File(str_saki2); 82 if(!file22.isDirectory()) return; 83 File files23[] = file22.listFiles(); 84 file_name = new String[files23.length]; 85 for (int i=0; i<files23.length; i++) { 86 file_name[i] = files23[i].getName(); 87 File item = files23[i]; 88 if(item.isDirectory()) { 89 folder[i] = item.getName(); 90 //System.out.println("folder[i]:" + folder[i]); 91 } 92 if (item.isFile()) { 93 name[i] = item.getName(); 94 //System.out.println("name[i]:" + name[i]); 95 } 96 } 97 lst0.setListData(file_name); 98 99 try { 100 folder_new_check(); 101 } catch (Exception e2) { 102 e2.printStackTrace(); 103 } 104 } 105 } 106 lst0.clearSelection(); 107 lst0.getSelectionModel().setAnchorSelectionIndex(-1); 108 lst0.getSelectionModel().setLeadSelectionIndex(-1); 109 } 110 111 112 // 画面作成メソッド 113 public void gamen_sakusei() { 114 //背景色の設定 115} 116 117 118 119 // リストボックスのNEWファイルを赤で表示する 120 public class StripedListCellRenderer extends DefaultListCellRenderer { 121 public Component getListCellRendererComponent(JList list, Object value, 122 int index, boolean isSelected, boolean cellHasFocus) { 123 JLabel label = (JLabel) super.getListCellRendererComponent(list, value,index, isSelected, cellHasFocus); 124 if (new_flag[index] == 1) { 125 label.setForeground(Color.red); 126 } 127 return label; 128 } 129 } 130 131 132 public void folder_new_check() throws Exception { 133 134 //フォルダの一覧を抽出する 135 File file22 = new File(str_pass[1]); 136 File files23[] = file22.listFiles(); 137 file_name = new String[files23.length]; 138 for (int i=0; i<files23.length; i++) { 139 file_name[i] = files23[i].getName(); 140 File item = files23[i]; 141 if(item.isDirectory()) { 142 folder[i] = item.getName(); 143 //System.out.println("folder[i]:" + folder[i]); 144 } 145 if (item.isFile()) { 146 name[i] = item.getName(); 147 //System.out.println("name[i]:" + name[i]); 148 } 149 } 150 151 for(int i=0;i<new_cou[0];i++) { 152 file_name3[i] = new_file[i].substring(5); 153 String sarch2 = "\"; 154 int result = file_name3[i].indexOf(sarch2); 155 if (result != -1) { 156 kiridashi = file_name3[i].substring(0,result); 157 } 158 for(int j=0;j<files23.length; j++) { 159 if(folder[j].equals(kiridashi)) { 160 new_flag[j]=1; 161 } 162 } 163 } 164 } 165 166 // 初期化 167 public static void initialaize() { 168 } 169 170 171 public static void main(String[] args) throws Exception { 172 173 NEW_FILE_SEARCH.new_file_search(new_file,koushinbi,new_cou,cou_folde,cou_file,str_pass,folde_name_new,file_name_new); 174 new DMSZUMEN(); 175 } 176 177} 178 179 180 181public class NEW_FILE_SEARCH{ 182 183 184 public static void new_file_search(String new_file[],int koushinbi[],int new_cou[],int cou_folde[],int cou_file[],String str_pass[],String folde_name_new[][],String file_name_new[][]) throws Exception { 185 186 String format2; 187 String format3; 188 189 // 初期化 190 for(int i=1;i<=5;i++) { 191 cou_folde[i] = 0; 192 cou_file[i] = 0; 193 } 194 195 String strmoto = str_pass[2] + "\"; 196 197 198 // 1階層目チェック 199 File file_1 = new File(strmoto); 200 File files_1[] = file_1.listFiles(); 201 for (int i=0; i<files_1.length; i++) { 202 File item = files_1[i]; 203 // 階層のフォルダ名を取得 204 if(item.isDirectory()) { 205 folde_name_new[1][cou_folde[1]] = item.getName(); 206 //System.out.println("folde_name_new[1][cou_folde[1]]:" + folde_name_new[1][cou_folde[1]]); 207 cou_folde[1] = cou_folde[1] + 1; 208 } 209 // 階層のファイル名を取得 210 if (item.isFile()) { 211 file_name_new[1][cou_file[1]] = item.getName(); 212 cou_file[1] = cou_file[1] + 1; 213 } 214 } 215 216 217 // 2階層目以降チェック 218 for(int k=1;k<6;k++) { 219 for (int i = 0;i<cou_folde[k];i++) { 220 File file_2 = new File(strmoto + folde_name_new[k][i]); 221 File files_2[] = file_2.listFiles(); 222 for (int j=0; j<files_2.length; j++) { 223 File item = files_2[j]; 224 // 階層のフォルダ名を取得 225 if(item.isDirectory()) { 226 folde_name_new[k+1][cou_folde[k+1]] = folde_name_new[k][i] + "\" + item.getName(); 227 //System.out.println("folde_name_new[k+1][cou_folde[k+1]]:" + folde_name_new[k+1][cou_folde[k+1]]); 228 cou_folde[k+1] = cou_folde[k+1] + 1; 229 } 230 // 階層のファイル名を取得 231 if (item.isFile()) { 232 file_name_new[k+1][cou_file[k+1]] = folde_name_new[k][i] + "\" + item.getName(); 233 //System.out.println("file_name_new[k+1][cou_file[k+1]]:" + file_name_new[k+1][cou_file[k+1]]); 234 cou_file[k+1] = cou_file[k+1] + 1; 235 } 236 } 237 } 238 } // 2階層目以降チェック終わり 239 240 new_cou[0] = 0; 241 242 for(int i=2;i<6;i++) { 243 for(int j=0;j<cou_file[i];j++) { 244 File file200 = new File(strmoto + file_name_new[i][j]); 245 long lastModified = file200.lastModified(); 246 Date date = new Date(lastModified); 247 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 248 format2 = sdf.format(date.getTime()); 249 Calendar calendar = Calendar.getInstance(); 250 calendar.setTime(date); 251 calendar.add(Calendar.DAY_OF_MONTH, +koushinbi[0]);// 直近1ヶ月 252 //calendar.add(Calendar.MONTH, +koushinbi[0]);// 直近1ヶ月 253 Date d1 = calendar.getTime(); 254 Date date2 = new Date(); 255 SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd"); 256 format3 = sdf2.format(date2.getTime()); 257 Calendar calendar2 = Calendar.getInstance(); 258 calendar2.setTime(date2); 259 if(d1.compareTo(date2) == -1){ 260 }else { 261 new_file[new_cou[0]] = file_name_new[i][j]; 262 new_cou[0] = new_cou[0] + 1; 263 } 264 } 265 } 266 }ファイルの最終更新日確認処理 267 268} 269 270 271 272```![イメージ説明](c689c5b6a6d23aad7f9258c5c5cee590.jpeg) 273 274社内のサーバーのファイルを閲覧し、リストボックスに表示するようにしました。 275ファイルの更新日が直近30日以内のフォルダ/ファイルはリストボックスで赤字になるように設定しましたが、 276「テスト2」フォルダが黒字になってしまいます。(テスト2はテストをそのままコピーしてます。) 277文字数制限があるため、一部消去&他classのコードは入れておりませんが、今回の件とは関係ないと思います。 278 279リストボックス上でクリックしたままだと赤字ですが、クリックを離すと黒字になるため、indexが上手く 280操作出来ていないと思いますが、どのように修正すればよいか分かりません。 281 282宜しくお願い致します。 283 284 285```JAVAコード
マークダウンがきちんと適用されていません
もう一度 <code>を押して、Javaコードではなく Javaと直して
コードを貼りつけなおしてください。
すみません。
Javaで修正しました。
宜しくお願い致します。
いやコードないけど...
大分コードが煩雑になっています. ぱっと見て「フォルダの一覧を抽出する」というコメントが3つもあります. 修正をする前にコードの整理をされたほうが良いように思います.
「そんなことより修正しないと…」と思われるかもしれませんが, このコードでは, どこに副作用が出るかもしれない状態です.
処理毎にメソッドを分け, 名前を適切に付けて頂きたいです.
変数名に番号が入っている時は, 変数名の付け方・スコープ(変数の使える範囲)が間違っているという客観的な印となります.
テキトウにコードを書いていると, ここでは使えません的なことがあり, それが面倒だからとプログラム全体で見えるスコープにしてしまったりします. すると, 同じような機能が必要だけどもコピペすると既にあると言われるので, 名前に番号を付けてしまうようになります.
また, ご質問のようにコードを提示する場合に, サイズ的な問題で一部だけの提示となってしまった場合に, 各変数が見えない所で変更されている可能性が捨てられず, 結局全部を見ないと分からないことになります.
for(int i=0;i<5000;i++) {
new_flag[i]=0;
}
というコードがありますが, この 5000 という数字は int new_flag[5000]; という宣言をしている所からと思います.
ですが, この new_flag 配列は使われ方を見る限りフォルダ下のファイル/フォルダ数だけ必要なものであり, 一般にフォルダ下にファイル/フォルダ数が幾つあるのかは決まっておりません.
file_name = new String[files23.length]; と同様, このような性質の変数は, 大きさが分かった時点で作成するようにしてください.
回答1件
あなたの回答
tips
プレビュー