Java 如何在单击两个不同的单选按钮时更改组合框的列表项
Page1.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
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)。