Java 将数据从数据库加载到每个字段的JCheckbox
我正在使用JFreechart库创建一个分析系统,我想拥有类似于MS excel中的透视表功能,我想汇集某个数据库字段,这样我就有了JCheckbox,其中包含数据库中每个不同值的名称。我使用JCombobox实现了这一点,如:Java 将数据从数据库加载到每个字段的JCheckbox,java,swing,jcombobox,jcheckbox,multipleselection,Java,Swing,Jcombobox,Jcheckbox,Multipleselection,我正在使用JFreechart库创建一个分析系统,我想拥有类似于MS excel中的透视表功能,我想汇集某个数据库字段,这样我就有了JCheckbox,其中包含数据库中每个不同值的名称。我使用JCombobox实现了这一点,如: Class.forName("oracle.jdbc.driver.OracleDriver"); dbcon = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "U
Class.forName("oracle.jdbc.driver.OracleDriver");
dbcon = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "USERNAME", "PASSWORD");
Statement st = dbcon.createStatement();
String combo = "Select DORM_NAME from dormitory_master_table";
ResultSet res = st.executeQuery(combo);
Vector v = new Vector();
while (res.next()) {
String ids = res.getString("DORM_NAME");
v.add(ids);
cboDormitory = new JComboBox(v);
这会将所有宿舍名称放入Jcombobox,但这对于我想要执行的操作无效,因为我需要能够选择多个对象。如何实现这一点?为了澄清您是否希望在单个
jcombox
中有多个JCheckBox
,以便在屏幕上没有数百个JCheckBox
的情况下允许多个选择
在这种情况下,听起来像是为JList
工作
见:
JList
将允许从值列表中进行多个选择(直接从orcale截取的屏幕截图-如何使用列表教程来说明我的意思):
下面是一个使用JCheckBox
s的自定义示例:
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class JListTest {
public JListTest() {
JFrame frame = new JFrame();
frame.setTitle("JList Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initComponents(frame);
frame.pack();
frame.setVisible(true);
}
private void initComponents(JFrame frame) {
String[] strs = {"swing", "home", "basic", "metal"};
final JList checkBoxesJList = new JList(createData(strs));
checkBoxesJList.setCellRenderer(new CheckListRenderer());
checkBoxesJList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
checkBoxesJList.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int index = checkBoxesJList.locationToIndex(e.getPoint());
CheckableItem item = (CheckableItem) checkBoxesJList.getModel().getElementAt(index);
item.setSelected(!item.isSelected());
Rectangle rect = checkBoxesJList.getCellBounds(index, index);
checkBoxesJList.repaint(rect);
}
});
JScrollPane scrollPane = new JScrollPane(checkBoxesJList);
frame.add(scrollPane, BorderLayout.CENTER);
}
private CheckableItem[] createData(String[] strs) {
int n = strs.length;
CheckableItem[] items = new CheckableItem[n];
for (int i = 0; i < n; i++) {
items[i] = new CheckableItem(strs[i]);
}
return items;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new JListTest();
}
});
}
}
class CheckListRenderer extends JCheckBox implements ListCellRenderer {
public CheckListRenderer() {
setBackground(UIManager.getColor("List.textBackground"));
setForeground(UIManager.getColor("List.textForeground"));
}
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean hasFocus) {
setEnabled(list.isEnabled());
setSelected(((CheckableItem) value).isSelected());
setFont(list.getFont());
setText(value.toString());
return this;
}
}
class CheckableItem {
private String str;
private boolean isSelected;
public CheckableItem(String str) {
this.str = str;
isSelected = false;
}
public void setSelected(boolean b) {
isSelected = b;
}
public boolean isSelected() {
return isSelected;
}
@Override
public String toString() {
return str;
}
}
3) 只需参考ArrayList
(我们称之为v
)调用createData
:
从你的问题中很难判断你是需要JCheckBox还是JComboBox?正如你所说,需要JCheckBox?O.oI需要将值从数据库加载到JCheckbox+1,以便英勇地使
JList
显示为可编辑,但JTable
可能提供更好的保真度,对于.haha:)+1,非常好的建议从未想过:O.我的问题是让值从数据库中返回基本和金属负载。我无法理解ArrayList(我是初学者),所以我尝试了以下方法:Statement st=conn.createStatement();String combo=“从DLY_DEP_视图中选择不同的SCHM_代码”;结果集res=st.executeQuery(组合);字符串id=“”;字符串[]val=null;虽然(res.next()){ids=res.getString(“SCHM_CODE”);val=ids.split(“\n”);checkBoxesJList=new JList(createData(val));}
@Stanley,但问题是您使用的是String[],只有当您知道之前的项目数量时,才应使用此选项。请参阅更新private CheckableItem[] createData(ArrayList<String> strs) { int n = strs.size(); CheckableItem[] items = new CheckableItem[n]; for (int i = 0; i < n; i++) { items[i] = new CheckableItem(strs.get(i)); } return items; }
createData(v);