Java 如何使radiobutton更改表格数据

Java 如何使radiobutton更改表格数据,java,mysql,sql,jtable,Java,Mysql,Sql,Jtable,我正在制作一个添加学生和教师数据的程序。我想通过选择单选按钮在表中为学生或教师显示数据 public void paneling(){ panell = new JPanel(new BorderLayout()); DefaultTableModel model = new DefaultTableModel(); JTable table = new JTable(); //make the table table.setModel(model

我正在制作一个添加学生和教师数据的程序。我想通过选择单选按钮在表中为学生或教师显示数据

public void paneling(){
    panell = new JPanel(new BorderLayout());
    DefaultTableModel model = new DefaultTableModel();
        JTable table = new JTable(); //make the table
        table.setModel(model);
        table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
        table.setFillsViewportHeight(true);
        JScrollPane scroll = new JScrollPane(table);
        try{
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection(url, username, password);

        }catch(Exception e){
            JOptionPane.showMessageDialog(null, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        }
    panell.add(scroll,BorderLayout.CENTER);
    panel4 = new JPanel();
    panel4.setLayout(new FlowLayout());
    rb_siswa = new JRadioButton("Siswa");
    rb_dosen = new JRadioButton("Dosen");
    ButtonGroup bg = new ButtonGroup();
    bg.add(rb_siswa);
    bg.add(rb_dosen);
    rb_siswa.setSelected(true); //i set RadioButton siswa default
    panel4.add(rb_siswa);
    panel4.add(rb_dosen);
    panell.add(panel4,BorderLayout.NORTH);
    if(rb_siswa.isSelected()){ //the first if
        String[] columnNames= {"NIM", "ID_Jurusan", "ID_Kelas", "Name", "Tanggal_Lahir", "Gender", "Semester", "Alamat", "email", "nohp"};
        model.setColumnIdentifiers(columnNames);
        try{
        sql = "select * from siswa";
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while(rs.next()){
                NIM = rs.getString("NIM");
                IDJurusan = rs.getString("id_jurusan");
                IDKelas = rs.getString("id_kelas");
                Name = rs.getString("Nama");
                TL = rs.getString("TanggalLahir");
                gender = rs.getString("JenisKelamin");
                Semester = rs.getString("Semester");
                alamat = rs.getString("Alamat");
                email = rs.getString("e-mail");
                nohp = rs.getString("nohp");
                model.addRow(new Object[]{NIM, IDJurusan, IDKelas, Name, TL, gender, Semester, alamat, email, nohp});
            }
        }catch(Exception aae){
            JOptionPane.showMessageDialog(null, aae.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        }
    }
    else if(rb_dosen.isSelected()){ // the second if
        String[] columnNames= {"ID_Dosen", "Name", "Gender", "Alamat", "email", "nohp"};
        model.setColumnIdentifiers(columnNames);
        try{
            sql = "select * from siswa";
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while(rs.next()){
                IDDosen = rs.getString("IDDosen");
                Name = rs.getString("Nama");
                gender = rs.getString("JenisKelamin");
                alamat = rs.getString("Alamat");
                email = rs.getString("email");
                nohp = rs.getString("nohp");
                model.addRow(new Object[]{IDDosen, Name, gender, alamat, email, nohp});
            }
        }catch(Exception aae){
    }
    }
如果选择单选按钮,我想更改表格。我需要做一个按钮吗


我对Swing一窍不通(上次使用Swing是在我上学的时候),但似乎你需要在单选按钮中添加一个听众

这里解释了这一概念:

基本上,您希望创建一个更改侦听器,如下所示:

ChangeListener changeListener = new ChangeListener() {
  public void stateChanged(ChangeEvent changEvent) {
    AbstractButton aButton = (AbstractButton)changEvent.getSource();
    ButtonModel aModel = aButton.getModel();
    // Code to change table here
  }
};
rb_siswa.addChangeListener(changeListener);
rb_dosen.addChangeListener(changeListener);
然后,您可以将更改侦听器添加到按钮中,如下所示:

ChangeListener changeListener = new ChangeListener() {
  public void stateChanged(ChangeEvent changEvent) {
    AbstractButton aButton = (AbstractButton)changEvent.getSource();
    ButtonModel aModel = aButton.getModel();
    // Code to change table here
  }
};
rb_siswa.addChangeListener(changeListener);
rb_dosen.addChangeListener(changeListener);
这可能会奏效。看起来无法将侦听器直接添加到
按钮组,而不能添加到按钮。这是我的第一个想法。您可以返回所选内容的ButtonModel(如果我没有读错的话),但是ButtonGroup没有自己的侦听器概念

请看这里:

我希望这有帮助


请让我知道,如果我有任何错误,因为它已经很多年了,因为我已经接触到任何与秋千有关的东西

我对Swing一窍不通(上次使用Swing是在我上学的时候),但似乎你需要在单选按钮中添加一个监听器

这里解释了这一概念:

基本上,您希望创建一个更改侦听器,如下所示:

ChangeListener changeListener = new ChangeListener() {
  public void stateChanged(ChangeEvent changEvent) {
    AbstractButton aButton = (AbstractButton)changEvent.getSource();
    ButtonModel aModel = aButton.getModel();
    // Code to change table here
  }
};
rb_siswa.addChangeListener(changeListener);
rb_dosen.addChangeListener(changeListener);
然后,您可以将更改侦听器添加到按钮中,如下所示:

ChangeListener changeListener = new ChangeListener() {
  public void stateChanged(ChangeEvent changEvent) {
    AbstractButton aButton = (AbstractButton)changEvent.getSource();
    ButtonModel aModel = aButton.getModel();
    // Code to change table here
  }
};
rb_siswa.addChangeListener(changeListener);
rb_dosen.addChangeListener(changeListener);
这可能会奏效。看起来无法将侦听器直接添加到
按钮组,而不能添加到按钮。这是我的第一个想法。您可以返回所选内容的ButtonModel(如果我没有读错的话),但是ButtonGroup没有自己的侦听器概念

请看这里:

我希望这有帮助


请让我知道,如果我有任何错误,因为它已经很多年了,因为我已经接触到任何与秋千有关的东西

您可以向单选按钮添加
itemstener
。如果您只有两个单选按钮,那么请避免使用任何
枚举器
,直接使用如下内容:

JRadioButton radio1 = new JRadioButton("Hello");
JRadioButton radio2 = new JRadioButton("World");

ButtonGroup btnGroup = new ButtonGroup();

// add listeners to button
radio1.addActionListener(this);
radio2.addActionListener(this);

// add buttons to button group
btnGroup.add(radio1);
btnGroup.add(radio2);

.
.
.
// and implement the itemStateChanged() method as follows:
public void itemStateChanged(ItemEvent e){

       if(radio1.isSelected())
       {
            // create the default table model and then populate it to jtable and put the jtable into scroll bar (for student)
       }
       else {
            // same as above (for teacher).
       }

}

您可以向单选按钮添加
itemstener
。如果您只有两个单选按钮,那么请避免使用任何
枚举器
,直接使用如下内容:

JRadioButton radio1 = new JRadioButton("Hello");
JRadioButton radio2 = new JRadioButton("World");

ButtonGroup btnGroup = new ButtonGroup();

// add listeners to button
radio1.addActionListener(this);
radio2.addActionListener(this);

// add buttons to button group
btnGroup.add(radio1);
btnGroup.add(radio2);

.
.
.
// and implement the itemStateChanged() method as follows:
public void itemStateChanged(ItemEvent e){

       if(radio1.isSelected())
       {
            // create the default table model and then populate it to jtable and put the jtable into scroll bar (for student)
       }
       else {
            // same as above (for teacher).
       }

}

在对
JTable
的模型进行更改后,是否尝试
table.revalidate()
table.repaint()
。还要记住,更改同一模型对象并不保证视图值的更改。而是创建一个新的
DefaultTableModel
对象,或者在使用它之前将其设为空。此链接可能对您有所帮助@VighaneshGursale已经开始销售了,但它不起作用。在对
JTable
的模型进行更改后,您是否尝试过
table.revalidate()
table.repaint()
。还要记住,更改同一模型对象并不保证视图值的更改。而是创建一个新的
DefaultTableModel
对象,或者在使用它之前将其设为空。此链接可能对您有所帮助@VighaneshGursale已经开始销售了,但它不起作用,所以我需要将我的if代码放到actionperformed中?并公开我的模型方法?所以我需要把我的if代码放到actionperformed?并将我的模型方法公开?相同,不起作用,我尝试在两者上添加System.out.print,以确保radiobutton正常工作,但它无法让您发布更新的代码您所做的更改,以便我们了解您面临的问题。在添加button group.same中的组件之前,还要检查您是否添加了侦听器。我尝试在这两个组件上添加System.out.print,以确保radiobutton正常工作,但它不允许您发布更新的代码您所做的更改,以便我们了解您面临的问题。在按钮组中添加组件之前,还要检查是否添加了侦听器。