-1

ファイル チューザーをアクティブにするボタンをクリックし、結果のファイルを追加すると、パネルの色が消えます。なぜこれが起こっているのか誰にも分かりますか?

import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JLabel;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.filechooser.FileSystemView;
import javax.swing.JFileChooser;
import javax.swing.plaf.FileChooserUI;

@SuppressWarnings("serial")
public class pan extends JPanel implements DropTargetListener {

    private DefaultListModel listModel = new DefaultListModel();
    private JButton addbutton;
    private JButton removebutton;
    private JButton selectbutton;
    private JButton lockbutton;
    private JButton unlockbutton;

    /**
     * Create the panel.
     */
    public pan() {
        setLayout(null);
        addbutton = new JButton("New button");
        addbutton.setBounds(10, 10, 90, 100);
        addbutton.addActionListener(new Action());
        add(addbutton);

        removebutton = new JButton("New button");
        removebutton.setBounds(110, 10, 90, 100);
        add(removebutton);

        selectbutton = new JButton("New button");
        selectbutton.setBounds(210, 10, 90, 100);
        add(selectbutton);

        lockbutton = new JButton("New button");
        lockbutton.setBounds(310, 10, 90, 100);
        add(lockbutton);

        unlockbutton = new JButton("New button");
        unlockbutton.setBounds(410, 10, 90, 100);
        add(unlockbutton);

        JLabel headerLabel = new JLabel("New label");
        headerLabel.setBorder(new BevelBorder(BevelBorder.RAISED,
            Color.LIGHT_GRAY, Color.GRAY, null, null));
        headerLabel.setUI(new ModifLabelUI());
        headerLabel.setBounds(10, 120, 635, 30);
        add(headerLabel);   
    }


    class Action implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getSource()==addbutton){

                JFileChooser filechooser=new JFileChooser();
                filechooser.setMultiSelectionEnabled(true);             
                filechooser.updateUI();
                filechooser.showOpenDialog(new pan());
                File files=filechooser.getSelectedFile();
                listModel.addElement(files);
        }       
    }
}
4

2 に答える 2

1

updateUI()これは、「UI プロパティを現在のルック アンド フィールの値にリセットする」の適切な使用方法ではありません。メソッドを呼び出す理由は明確ではありませんが、観察した色の変化を引き起こす可能性があります。行を削除することから始めます。それができない場合は、質問を編集して、説明した問題を示すsscceを含めてください。

null レイアウト マネージャー以外の使用も検討してください。

于 2012-11-17T17:11:41.433 に答える
0

メソッドの最後の数行を次のように変更actionPerformedします。

     int returnVal = filechooser.showOpenDialog(new pan());
     if(returnVal == JFileChooser.APPROVE_OPTION) {
         //since its multiselection enabled, 
         //get the selected files not selected file
         File[] files=filechooser.getSelectedFiles();
         if(files != null){
           for(File file: files){
                listModel.addElement(file);
           }
         }
     }

編集:適切に行われるなど、予想される例外に対する適切な例外処理を確認してくださいHeadlessException

説明

  1. ブラウズパネルが開いているとき、ユーザーは操作をキャンセルできます。その場合、ファイルが選択されていないため、ファイルを読み取るべきではありません。これが、ユーザー選択のチェックを追加する必要がある理由です。つまり、ファイルが選択されているかどうかです。

  2. はasでfilechooser開かれるため、単一のファイルを取得する代わりに、選択したファイルを取得する必要があります。setMultiSelectionEnabledtrueFile[]

  3. 複数のファイルを取得しているため、各ファイルをに追加する必要がありますlistModel。1つの方法は、ファイル配列を繰り返し、一度に1つのファイルを追加することです。他のオプションは、を使用Arrays.asList()してリストを取得し、すべてのファイルを一度に追加することです。

お役に立てれば。

于 2012-11-16T22:47:05.857 に答える