0

私のアプリケーションは次のように構成されています。

  • メインウィンドウでは、ユーザーは解析するCSVファイルを選択できます
  • JOptionPaneは、CSVファイルが選択された後に表示され、JOptionPaneにはさまざまな選択肢のあるドロップダウンメニューが含まれています。それぞれが個別のウィンドウを生成します
  • 現在、JOptionPaneは、メニューから選択して[OK]ボタンをクリックすると閉じます。

ユーザーが必要に応じて別のものを選択できるように、JOptionPaneを強制的に開いたままにする方法を探しています。右上隅の「X」をクリックするだけでJOptionPaneを閉じたいのですが。JOptionPaneを使用することが最善の方法ではない場合、同様の結果を達成するための他の可能性も受け入れています。

これが私が取り組んでいる関連するコードのブロックです:

try 
{
    CSVReader reader = new CSVReader(new FileReader(filePath), ',');

    // Reads the complete file into list of tokens.
    List<String[]> rowsAsTokens = null;

    try 
    {
        rowsAsTokens = reader.readAll();
    } 

    catch (IOException e1) 
    {
        e1.printStackTrace();
    }

    String[] menuChoices = { "option 1", "option 2", "option 3" };

    String graphSelection = (String) JOptionPane.showInputDialog(null, 
            "Choose from the following options...", "Choose From DropDown", 
            JOptionPane.QUESTION_MESSAGE, null, 
            menuChoices, // Array of menuChoices
            menuChoices[0]); // Initial choice

    String menuSelection = graphSelection;

    // Condition if first item in drop-down is selected
    if (menuSelection == menuChoices[0] && graphSelection != null)
    {
        log.append("Generating graph: " + graphSelection + newline);

        option1();          
    }

    if (menuSelection == menuChoices[1] && graphSelection != null)
    {

        log.append("Generating graph: " + graphSelection + newline);

        option2();      
    }

    if (menuSelection == menuChoices[2] && graphSelection != null)
    {
        log.append("Generating graph: " + graphSelection + newline);

        option3();
    }

    else if (graphSelection == null)
    {   
        log.append("Cancelled." + newline);
    }
}
4

3 に答える 3

2

ユーザーがオプションを選択した後でも、オプションを含むウィンドウを開いたままにして、必要に応じて別のオプションを選択できるようにしたいと思います。ドロップダウン値が選択されると JOptionPane が閉じるデフォルトの動作ではなく、JOptionPane を開いたままにするにはどうすればよいですか?

  • これは基本的なプロパティです。デフォルトJOptionPaneでは破棄されます。これは、汚いハックなしでは不可能です。そうしないでください

  • ModalityTypeの適切な値を使用するJDialog(装飾されていない可能性があります)

  • いくつかのバリエーションを使用できますJava & Ribbon

  • JComboBox または JMenu に、JMenuItems (非常に良い方法) を使用して、必要な選択肢をJLayer または GlassPane に配置できます。

  • JMenuこれはor JToolBarの標準的な仕事だと思います

于 2013-02-11T22:55:05.623 に答える
2

これらのオプション ペインのいずれかで、閉じる前に何度でも選択を変更できます。3 番目のオプション ペインには、1 番目で以前に選択された値 (現在の値) が表示されます (既定値)。

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

class Options {

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                Object[] options = {
                    "Option 1",
                    "Option 2",
                    "Option 3",
                    "None of the above"
                };
                JComboBox optionControl = new JComboBox(options);
                optionControl.setSelectedIndex(3);
                JOptionPane.showMessageDialog(null, optionControl, "Option",
                        JOptionPane.QUESTION_MESSAGE);
                System.out.println(optionControl.getSelectedItem());

                String graphSelection = (String) JOptionPane.showInputDialog(
                        null,
                        "Choose from the following options...", 
                        "Choose From DropDown",
                        JOptionPane.QUESTION_MESSAGE, null,
                        options, // Array of menuChoices
                        options[3]); // Initial choice
                System.out.println(graphSelection);

                // show the combo with current value!
                JOptionPane.showMessageDialog(null, optionControl, "Option",
                        JOptionPane.QUESTION_MESSAGE);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
        SwingUtilities.invokeLater(r);
    }
}

マイケルは . で正しく推測したと思いますJListリストコンボの比較は次のとおりです。

JList&の両方JComboBoxで、コンボに見られるようにレンダラーを使用できることに注意してください。重要な違いは、リストは複数選択をサポートする埋め込みコンポーネントであることです。

于 2013-02-11T23:13:40.650 に答える
1

次のソリューションでは、ドロップダウン メニューは表示されませんが、複数の値を選択できます。

a を使用しJListて選択を保存し、次のJOptionPane.showInputMessageように使用できます。

JList listOfChoices = new JList(new String[] {"First", "Second", "Third"});
JOptionPane.showInputDialog(null, listOfChoices, "Select Multiple Values...", JOptionPane.QUESTION_MESSAGE);

の後にgetSelectedIndices()onメソッドを使用すると、 から選択されたインデックスを含む整数の配列が返され、a を使用してそれらの値を取得できます。listOfChoicesJOptionPane.showInputDialog()JListListModel

int[] ans = listOfChoices.getSelectedIndices();
ListModel listOfChoicesModel = listOfChoices.getModel();
for (int i : ans) {
    System.out.println(listOfChoicesModel.getElementAt(i));
}
于 2013-02-11T23:14:26.033 に答える