Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在单击两个不同的单选按钮时更改组合框的列表项_Java_Swing_Nullpointerexception_Jcombobox_Jradiobutton - Fatal编程技术网

Java 如何在单击两个不同的单选按钮时更改组合框的列表项

Java 如何在单击两个不同的单选按钮时更改组合框的列表项,java,swing,nullpointerexception,jcombobox,jradiobutton,Java,Swing,Nullpointerexception,Jcombobox,Jradiobutton,Page1.java中有一个私有成员,它是组合框 public class Page1 extends javax.swing.JInternalFrame { private javax.swing.JComboBox jComboMonth; public JComboBox getjComboMonth() { return jComboMonth; } public void setjComboMonth(JComboB

Page1.java中有一个私有成员,它是组合框

     public class Page1 extends javax.swing.JInternalFrame {

     private javax.swing.JComboBox jComboMonth;

     public JComboBox getjComboMonth() {
        return jComboMonth;
    }

    public void setjComboMonth(JComboBox jComboMonth) {
        this.jComboMonth = jComboMonth;
    }

     public void showList() {

       jComboMonth.removeAllItems();
       jComboMonth.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"April-June", 
       "July-September", "October-December"}));

    }

    public void showList1() {
        System.out.println("Inside showlist1 method");//for testing


       jComboMonth.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"April-June",
        "July-September", "October-December", "January-February"}));         



    }

      }
这是scrollpane.java中的代码,其中是单选按钮,我想通过单击这两个不同的单选按钮,在Page1.java中的同一个组合框中填充两个不同的列表

      public class scrollPane extends javax.swing.JFrame {
      private javax.swing.JRadioButton jRadioAnnual;
      private javax.swing.JRadioButton jRadioQuarter;
      private javax.swing.ButtonGroup buttonGroup1;
    private javax.swing.ButtonGroup buttonGroup2;
    private javax.swing.ButtonGroup buttonGroup3;
    private javax.swing.ButtonGroup buttonGroup4;



      public scrollPane() {
        initComponents();

    }



      private void jRadioAnnualActionPerformed(java.awt.event.ActionEvent evt) {                                             
        :


        Page1 pg1 = new Page1();
        pg1.showList();




         }                                            

        private void jRadioQuarterActionPerformed(java.awt.event.ActionEvent evt) {                                              

        Page1 pg1 = new Page1();
        pg1.showList1();
        }         


             java.awt.EventQueue.invokeLater(new Runnable() {
              public void run() {
                new scrollPane().setVisible(true);


            }
        });



      }


BUT STILL NOW THE COMBOBOX DOES NOT POPULATE THE LIST :(

你想要这样的东西吗?


从您的代码中,我得到的是,您正在调用Page1 pg1=new Page1();在这两种方法中。不要那样做。这是在每次单击JRadioButtons时创建一个新的组合框。 因此,在scrollPane类的开头调用Page1类。 像这样:

public class scrollPane extends javax.swing.JFrame {
      private javax.swing.JRadioButton jRadioAnnual;
      private javax.swing.JRadioButton jRadioQuarter;
      private javax.swing.ButtonGroup buttonGroup1;
      private javax.swing.ButtonGroup buttonGroup2;
      private javax.swing.ButtonGroup buttonGroup3;
      private javax.swing.ButtonGroup buttonGroup4;
      Page1 pg1 = new Page1();



      public scrollPane() {
        initComponents();

    }
...
 private void jRadioAnnualActionPerformed(java.awt.event.ActionEvent evt) {                                             
        pg1.showList();
         }                                            
        private void jRadioQuarterActionPerformed(java.awt.event.ActionEvent evt) {                                              
        pg1.showList1();
        } 
并删除
Page1 pg1=new Page1()
private void jRadioAnnualActionPerformed(java.awt.event.ActionEvent evt)
class和
private void jradioquartactionperformed(java.awt.event.ActionEvent evt)
class

像这样:

public class scrollPane extends javax.swing.JFrame {
      private javax.swing.JRadioButton jRadioAnnual;
      private javax.swing.JRadioButton jRadioQuarter;
      private javax.swing.ButtonGroup buttonGroup1;
      private javax.swing.ButtonGroup buttonGroup2;
      private javax.swing.ButtonGroup buttonGroup3;
      private javax.swing.ButtonGroup buttonGroup4;
      Page1 pg1 = new Page1();



      public scrollPane() {
        initComponents();

    }
...
 private void jRadioAnnualActionPerformed(java.awt.event.ActionEvent evt) {                                             
        pg1.showList();
         }                                            
        private void jRadioQuarterActionPerformed(java.awt.event.ActionEvent evt) {                                              
        pg1.showList1();
        } 
请参阅下面的完整代码。创建两个像我在下面创建的新类并运行。 第1页类别:

import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;

public class Page1 extends javax.swing.JInternalFrame {

     private javax.swing.JComboBox jComboMonth;

     public Page1(JPanel parent)
     {
            setDefaultCloseOperation(JInternalFrame.EXIT_ON_CLOSE);
            setBounds(200, 50, 150, 80);
            JPanel contentPane = new JPanel();
            jComboMonth = new JComboBox();
            contentPane.add(jComboMonth);
            setContentPane(contentPane);
            parent.add(this);
            setVisible(true);
     }

     public JComboBox getjComboMonth() {
        return jComboMonth;
    }

    public void setjComboMonth(JComboBox jComboMonth) {
        this.jComboMonth = jComboMonth;
    }

     public void showList() {

       jComboMonth.removeAllItems();
       jComboMonth.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"April-June", 
       "July-September", "October-December"}));

    }

    public void showList1() {
        System.out.println(jComboMonth.getItemCount());
        jComboMonth.removeAllItems();
        System.out.println(jComboMonth.getItemCount());
        jComboMonth.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"April-June",
        "July-September", "October-December", "January-February"}));         

        System.out.println(jComboMonth.getItemCount());


    }

      }
滚动窗格类:

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class scrollPane extends javax.swing.JFrame {
    private JPanel contentPane;
    private javax.swing.JRadioButton jRadioAnnual;
    private javax.swing.JRadioButton jRadioQuarter;
    private javax.swing.ButtonGroup buttonGroup1;
    private Page1 pg1;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    scrollPane frame = new scrollPane();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    public scrollPane() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        setContentPane(contentPane);

        pg1 = new Page1(contentPane);

        jRadioAnnual = new JRadioButton("RadioAnnual");
        jRadioAnnual.setBounds(26, 32, 109, 23);

        jRadioQuarter=new JRadioButton("RadioQuarter");
        jRadioQuarter.setBounds(26, 50, 109, 23);

        buttonGroup1 = new ButtonGroup();
        buttonGroup1.add(jRadioAnnual);
        buttonGroup1.add(jRadioQuarter);
        contentPane.setLayout(null);




        contentPane.add(jRadioAnnual);
        contentPane.add(jRadioQuarter);


        jRadioAnnual.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                jRadioAnnualActionPerformed(e);
            }
        });
        jRadioQuarter.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                jRadioQuarterActionPerformed(e);
            }
        });

    }


      private void jRadioAnnualActionPerformed(java.awt.event.ActionEvent evt) {                                             


        pg1.showList();
     }                                            

        private void jRadioQuarterActionPerformed(java.awt.event.ActionEvent evt) {                                              


        pg1.showList1();
        }
        }

[值组合框至单选按钮]

private void jcombox2actionperformed(java.awt.event.ActionEvent evt){
如果(jCombox2.getSelectedIndex()==0){
jRadioButton1.setSelected(true);
}else if(jcombox2.getSelectedIndex()==1){
jRadioButton2.setSelected(true);

为了更快地获得更好的帮助,请发布一个(最少完整且可验证的示例)。虽然这似乎是一个明显的错误来源。..
Page1 pg1=null;.pg1.getjCombo..
很抱歉,它不起作用。在发布MCVE之前,它可能会一直“不起作用”。但是没有必要对此感到抱歉。如果你不解决这个问题,这对我来说不是问题。是的,很像这样,但单选按钮和组合框都在dif中两个不同的类和您在这里所做的事情我想做的正相反,即单击按钮,组合框项目列表发生更改。请通过单击JRadioButton或JButton帮助您进行更改?同时尝试创建MCVE并将其放入问题中,以便快速回答。“单击按钮,组合框项目列表发生更改”上面的代码正是这样做的。是的,先生,我能理解,但我的问题是---我的单选按钮和组合框在两个不同的类中。我已经编辑了我的代码,请看一看。我已经按照您的指示更改了代码,但问题仍然存在。我已经给出了完整的代码。使用这两个类在您的eclipes/netbeans中创建一个新项目并运行。这是我能从您提供的代码中得到的最大帮助。您在问题中提供的代码不完整,如果您仍然无法解决问题,请创建一个MCVE(从E获取帮助以创建MCVE)。