0

これを行う別の方法があることは知っていますが、誰かがこの方法でそれを行うための答えを持っているかどうかを確認したいと思います. 元の方法は、ShowDialog() 関数を呼び出した後に整数の戻り値を取得することです。イベント (以下に示す) 自体から取得したいと考えています。ファイルが選択されているかどうかを確認するコードをそこに挿入しましたが、そこに到達する前に承認ボタン ([OK] ボタン) が選択されているかどうかを確認する必要があります。以下のような設定を使用して、FileChooser ダイアログでどのボタンが押されているかを確認する方法を知っている人はいますか?

これが私のコードです:

private void FileChooser_OpenMouseClicked(java.awt.event.MouseEvent evt) {
        if(!FileChooser_Open.getSelectedFile().equals(null)) 
        {



        }
    }

元の方法:

//In response to a button click:
int returnVal = fc.showOpenDialog(aComponent);

違いは、元のメソッドはダイアログ ボックスが閉じられたときに戻り値を取得することですが、このメソッドでは、その戻り値を取得する方法がわかりません (ボックスは既に閉じていると思いますが、そこには何もありません)。戻り値をキャッチします)。あまり意味がないように見えたら申し訳ありません。

編集:詳細情報

これが私がダイアログを作成する方法です(メニュー項目「開く」は、showOpenDialog()メソッドを呼び出すイベントを発生させます。ご覧のとおり、戻り値をキャプチャしていません(我慢してください)。可能ですか?その後、戻り値を取得するか、MouseClicked イベントで [OK] ボタンが押されたかどうかを確認する方法を設計しますか?私は、発生したイベントに応じてコードが反応するイベントベースのプログラミングスタイルに焦点を合わせようとしていると思います、そして Open Menu イベント内の OK /承認ボタンのクリックのチェックをつかむのは少し...私の観点からはまとまりがないように見えます.おそらく、私はこの問題に対するC#/WinFormのアプローチに慣れすぎているのでしょうか?

private void MenuItem_OpenActionPerformed(java.awt.event.ActionEvent evt) {                                              
        FileChooser_Open.showOpenDialog(this);
    }  


private void FileChooser_OpenMouseClicked(java.awt.event.MouseEvent evt) {                                              
        if(!FileChooser_Open.getSelectedFile().equals(null)) 
        {



        }
    }        
4

1 に答える 1

1

質問が理解できれば、JFileChooser#approveSelection() メソッドを使用できる可能性があります。


import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class ApproveSelectionDemo {
  public JComponent makeUI() {
    final JPanel p = new JPanel();
    final JFileChooser fileChooser = new JFileChooser() {
      @Override public void approveSelection() {
        if(!getSelectedFile().exists()) {
          int returnVal = JOptionPane.showConfirmDialog(
                  this, "message", "title", JOptionPane.YES_NO_OPTION);
          if(returnVal!=JOptionPane.YES_OPTION) {
            return;
          }
        }
        super.approveSelection();
      }
    };
    p.add(new JButton(new AbstractAction("Open") {
      @Override public void actionPerformed(ActionEvent e) {
        int retvalue = fileChooser.showOpenDialog(p);
        if(retvalue==JFileChooser.APPROVE_OPTION) {
          System.out.println(fileChooser.getSelectedFile());
        }
      }
    }));
    return p;
  }
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        createAndShowGUI();
      }
    });
  }
  public static void createAndShowGUI() {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.getContentPane().add(new ApproveSelectionDemo().makeUI());
    f.setSize(320, 240);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}
于 2012-10-18T07:34:00.667 に答える