【问题标题】:Getting CheckBox input from JOptionPane从 JOptionPane 获取 CheckBox 输入
【发布时间】:2015-03-14 18:37:46
【问题描述】:

我正在制作一个 Swing 应用程序,但无法从嵌入在 JOptionPane 中的复选框获取输入

此时我单击一个加载 JOptionPane 的按钮(比较),然后选择要运行的两个动画。 我在想这行不通的原因是因为我得到了按钮的来源,而不是嵌入式 JCheckBox 这样做吗??

comparison.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

               JPanel a1=new JPanel();
               a1.add(bubbleCheckBox);
               a1.add(quickCheckBox);
               a1.add(insertionCheckBox);
               a1.add(selectionCheckBox);
               a1.add(mergeCheckBox);
              JOptionPane.showConfirmDialog(null, a1);

                  Object buttonPressed =e.getSource();

        if (buttonPressed.equals(insertionCheckBox)&&buttonPressed.equals(bubbleCheckBox)) {
            SortAnimator animator = new SortAnimator(new InsertionSorter(),new BubbleSorter());

        }else if(buttonPressed.equals(insertionCheckBox)&&buttonPressed.equals(quickCheckBox)){
         //    SortAnimator animator = new SortAnimator(new InsertionSorter(),new quickSorter());

        }else if(buttonPressed.equals(insertionCheckBox)&&buttonPressed.equals(selectionCheckBox)){
             SortAnimator animator = new SortAnimator(new InsertionSorter(),new SelectionSorter());

        }else if(buttonPressed.equals(insertionCheckBox)&&buttonPressed.equals(mergeCheckBox)){
                 // SortAnimator animator = new SortAnimator(new InsertionSorter(),new mergeSorter());

        }else if(buttonPressed.equals(quickCheckBox)&&buttonPressed.equals(bubbleCheckBox)){
            //

        }else if(buttonPressed.equals(quickCheckBox)&&buttonPressed.equals(mergeCheckBox)){

        }else if(buttonPressed.equals(quickCheckBox)&&buttonPressed.equals(selectionCheckBox)){

        }else if(buttonPressed.equals(selectionCheckBox)&&buttonPressed.equals(bubbleCheckBox)){
              SortAnimator animator = new SortAnimator(new SelectionSorter(),new BubbleSorter());

        }else if(buttonPressed.equals(selectionCheckBox)&&buttonPressed.equals(mergeCheckBox)){

        }else if (buttonPressed.equals(mergeCheckBox)&&buttonPressed.equals(bubbleCheckBox)){

        }else{
            //Invalid selection please select a maximum of two different algorithms
        }

【问题讨论】:

    标签: java swing joptionpane jcheckbox


    【解决方案1】:

    您也不能像以前那样使用 getSource() 来同时检测两个不同的事件源

    if (buttonPressed.equals(insertionCheckBox)&&buttonPressed.equals(bubbleCheckBox))
    getSource() 返回最初发生事件的对象。

    要解决您的问题,您可以使用诸如 isBubbleSelected、isMergeSelected、isInsertionSelected 等布尔值来检查复选框的状态,即它们是否被选中,您可以根据这些布尔值决定播放哪些动画 例如:isBubbleSelected = bubleCheckBox.isSelected();

    if (isBubbleSelected&&isInsertionSelected) {
            SortAnimator animator = new SortAnimator(new InsertionSorter(),new BubbleSorter());
    
        }else if(isInsertionSelected&&isQuickSelected){
         //    SortAnimator animator = new SortAnimator(new InsertionSorter(),new quickSorter());
    
        }else if(isInsertionSelected&&isSelectionSelected){
             SortAnimator animator = new SortAnimator(new InsertionSorter(),new SelectionSorter());
    
        }else if(isInsertionSelected&&isMergeSelected){
                 // SortAnimator animator = new SortAnimator(new InsertionSorter(),new mergeSorter());
    
        }else if(isQuickSelected&&isBubbleSelected){
            //
    
        }else if(isQuickSelected&&isMergeSelected){
    
        }else if(isQuickSelected&&isSelectionSelected){
    
        }else if(isSelectionSelected&&isBubbleSelected){
              SortAnimator animator = new SortAnimator(new SelectionSorter(),new BubbleSorter());
    

    【讨论】:

      【解决方案2】:

      在 ActionListener() 类中,您可以通过构造函数传递 JCheckBox,然后在操作发生时获取选择。

      前...

      public class JCheckBoxActionListener() implements ActionListener {
         JCheckBox jCheckBox;
      
         public JCheckBoxActionListener(JCheckBox jCheckBox) {
            this.jCheckBox = jCheckBox;
         }
      
         @Override
         public void actionPerformed(ActionEvent e) {
            System.out.println(jCheckBox.isSelected());
         }
      }
      

      添加监听器...假设“比较”是 JCheckBox

      comparison.addActionListener(new JCheckBoxActionListener(comparison));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-10
        • 1970-01-01
        • 1970-01-01
        • 2011-03-08
        • 2016-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多