Java 我有三个复选框,因为行中的三列都被选中,但我想从行中选择一个。如果选择一个,则取消选择另一个
我有三个复选框,因为行中的三列都被选中,但我想从行中选择一个。如果选择一个,则取消选择另外两个Java 我有三个复选框,因为行中的三列都被选中,但我想从行中选择一个。如果选择一个,则取消选择另一个,java,swing,Java,Swing,我有三个复选框,因为行中的三列都被选中,但我想从行中选择一个。如果选择一个,则取消选择另外两个 import java.awt.*; import java.awt.event.ActionEvent; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import javax.swing.*; import javax.
import java.awt.*;
import java.awt.event.ActionEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class CheckABunch extends JPanel {
private static final int CHECK_COL = 2;
@SuppressWarnings("unused")
private static Object[][] DATA = new Object[1][1];
private static final String[] COLUMNS = {"Number", "Present","Absent","Chk"};
private DataModel dataModel ;
private JTable table;
private DefaultListSelectionModel selectionModel;
@SuppressWarnings("unused")
private static Integer cntrow = 0;
private static JCheckBox jc1,jc2,jc3;
public CheckABunch() {
super(new BorderLayout());
//accessing data from database
final String driver = "com.mysql.jdbc.Driver";
final String connection ="jdbc:mysql://localhost/search";
final String user = "root";
final String password = "root";
Connection con;
Statement st;
ResultSet rs;
try {
Class.forName(driver);
con = DriverManager.getConnection(connection, user, password);
st = con.createStatement();
rs = st.executeQuery("Select count(*) from test;");
Object[][] DATA = new Object[1][1];
if(rs.first()){
DATA = new Object[rs.getInt(1)][COLUMNS.length];
cntrow = rs.getInt(1);
}
rs = st.executeQuery("Select * from test;");
int i = 0;
while (rs.next()) {
DATA[i][0] = rs.getString(2);
DATA[i][1] = new Boolean(false);
DATA[i][2] = new Boolean(false);
DATA[i][3] = new Boolean(false);
++i;
}
dataModel = new DataModel(DATA, COLUMNS);
table = new JTable(dataModel);
/*
* for (int j = 0; j < columns.length; j++) {
System.out.println(columns[j]);
}
*/
this.add(new JScrollPane(table));
this.add(new ControlPanel(), BorderLayout.PAGE_END);
table.setPreferredScrollableViewportSize(new Dimension(250, 175));
selectionModel = (DefaultListSelectionModel) table.getSelectionModel();
if (!con.isClosed()) {
con.close();
}
}catch(Exception e){
System.out.println(e);
}
}
private class DataModel extends DefaultTableModel {
public DataModel(Object[][] data, Object[] columnNames) {
super(data, columnNames);
}
@Override
public Class<?> getColumnClass(int columnIndex) {
if (columnIndex == 1 || columnIndex == 2 || columnIndex == 3) {
return getValueAt(0, 1).getClass();
}
return super.getColumnClass(columnIndex);
}
@Override
public boolean isCellEditable(int row, int column) {
return true;
}
}
//j panel for two buttons
private class ControlPanel extends JPanel {
public ControlPanel() {
this.add(new JLabel("Selection:"));
this.add(new JButton(new SelectionAction("Clear", false)));
this.add(new JButton(new SelectionAction("Check", true)));
}
}
private class SelectionAction extends AbstractAction {
boolean value;
public SelectionAction(String name, boolean value) {
super(name);
this.value = value;
}
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < dataModel.getRowCount(); i++) {
if (selectionModel.isSelectedIndex(i)) {
dataModel.setValueAt(value, i, CHECK_COL);
}
}
}
}
private static void createAndShowUI() {
JFrame frame = new JFrame("CheckABunch");
frame.add(new CheckABunch());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowUI();
}
});
}
}
import java.awt.*;
导入java.awt.event.ActionEvent;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.ResultSet;
导入java.sql.Statement;
导入javax.swing.*;
导入javax.swing.table.DefaultTableModel;
公共类CheckABunch扩展了JPanel{
专用静态最终整数检查\u COL=2;
@抑制警告(“未使用”)
私有静态对象[][]数据=新对象[1][1];
私有静态最终字符串[]列={“Number”、“Present”、“缺席”、“Chk”};
私有数据模型;
专用JTable表;
私有默认列表选择模型选择模型;
@抑制警告(“未使用”)
私有静态整数cntrow=0;
专用静态JCheckBox jc1、jc2、jc3;
公共支票{
超级(新边框布局());
//从数据库访问数据
最后一个字符串driver=“com.mysql.jdbc.driver”;
最终字符串连接=“jdbc:mysql://localhost/search";
最终字符串user=“root”;
最终字符串password=“root”;
连接con;
报表st;
结果集rs;
试一试{
Class.forName(驱动程序);
con=DriverManager.getConnection(连接、用户、密码);
st=con.createStatement();
rs=st.executeQuery(“从测试中选择计数(*)”;
对象[][]数据=新对象[1][1];
如果(rs.first()){
数据=新对象[rs.getInt(1)][COLUMNS.length];
cntrow=rs.getInt(1);
}
rs=st.executeQuery(“从测试中选择*”;
int i=0;
while(rs.next()){
数据[i][0]=rs.getString(2);
数据[i][1]=新布尔值(假);
数据[i][2]=新布尔值(假);
数据[i][3]=新布尔值(假);
++一,;
}
数据模型=新的数据模型(数据、列);
表=新的JTable(数据模型);
/*
*对于(int j=0;j
不要使用JCheckBox,而是使用JRadioButtons,这里的关键是:将所有单选按钮添加到同一ButtonGroup对象
i、 e
ButtonGroup ButtonGroup=new ButtonGroup();
JPanel radioPanel=新JPanel(新网格布局(1,0));
对于(int i=0;i
另外,您的代码还有其他问题:
- 您从未向我们展示与您的问题相关的代码——您在其中创建并添加复选框。是的,我们可以看到您在哪里声明JCheckBox变量,但是没有使用JCheckBox对象初始化它们或将其放置在GUI中的代码
- 另一方面,您展示了许多与当前问题完全无关的代码,这分散了我们理解您的问题的能力
- 您在上面的代码中使用了
访问修饰符,这可能会在以后的代码中产生影响。例如,JCheckBox变量和数据字段不应该是静态的静态
ButtonGroup buttonGroup = new ButtonGroup();
JPanel radioPanel = new JPanel(new GridLayout(1, 0));
for (int i = 0; i < stringArray.length; i++) {
JRadioButton radioButton = new JRadioButton(stringArray[i]);
radioPanel.add(radioButton);
buttonGroup.add(radioButton);
}