在 java 中从 JComboBox 获取整数值
Getting Integer value from JComboBox in java
我正在使用 JComboBox 将整数值作为 input.Tell 我可以使用哪个函数从组合框中获取值。
我的组合框将具有这些值。
cb1=new JComboBox();
for(int i=1;i<=31;i++)
{
if(i<10)
{
cb1.addItem("0"+i);
}
else
{
cb1.addItem(i);
}
}
我用这个函数来获取值。
int c=(Integer)cb1.getSelectedItem();
但它在我的代码中显示了这个错误。
我的代码如下。
Discharge_screen()
{
l = new JLabel("Discharge screen");
l.setHorizontalAlignment(SwingConstants.CENTER);
l.setVerticalAlignment(SwingConstants.CENTER);
l.setBackground(Color.GRAY);
l.setOpaque(true);
l1 = new JLabel("Discharge Destination");
l1.setBackground(Color.LIGHT_GRAY);
l1.setOpaque(true);
l2 = new JLabel("Discharge outcome");
l2.setBackground(Color.LIGHT_GRAY);
l2.setOpaque(true);
l3 = new JLabel("Discharge date");
l3.setBackground(Color.LIGHT_GRAY);
l3.setOpaque(true);
cb1=new JComboBox();
for(i=1;i<=31;i++)
{
if(i<10)
{
cb1.addItem("0"+i);
}
else
{
cb1.addItem(i);
}
}
cb2=new JComboBox();
for(i=1;i<=12;i++)
{
if(i<10)
{
cb2.addItem("0"+i);
}
else
{
cb2.addItem(i);
}
}
cb3=new JComboBox();
for(i=1950;i<=2015;i++)
{
cb3.addItem(i);
}
b1=new JButton("Submit");
b2=new JButton("Back to home");
t1=new JTextField();
t2=new JTextField();
panel = new JPanel();
panel.setLayout(null);
l.setBounds(100,40,225,35);
l1.setBounds(100,100,100,25);
t1.setBounds(205,100,125,25);
l2.setBounds(100,130,100,25);
t2.setBounds(205,130,125,25);
l3.setBounds(100,160,100,25);
cb1.setBounds(205,160,50,25);
cb2.setBounds(260,160,50,25);
cb3.setBounds(315,160,75,25);
b1.setBounds(100,190,100,25);
b2.setBounds(205,190,125,25);
panel.add(l);
panel.add(l1);
panel.add(t1);
panel.add(l2);
panel.add(t2);
panel.add(l3);
panel.add(cb1);
panel.add(cb2);
panel.add(cb3);
panel.add(b1);
panel.add(b2);
add(panel,BorderLayout.CENTER);
b1.addActionListener(this);
b2.addActionListener(this);
setTitle("Discharge screen");
setSize(450,400);
}
@Override
public void actionPerformed(ActionEvent event)
{
// TODO Auto-generated method stub
if(event.getSource()==b1)
{
Connection con = null;
Statement stmt=null;
ResultSet rs=null;
String a,b;
int c,d,e;
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String accessFileName = "C:\Users\dinesh\Documents\employee";
String connURL="jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+accessFileName+".accdb";
con = DriverManager.getConnection(connURL, "","");
stmt = con.createStatement();
a=t1.getText();
b=t2.getText();
c=(Integer) cb1.getSelectedItem();
System.out.println(c);
d=(Integer) cb2.getSelectedItem();
e=(Integer) cb3.getSelectedItem();
stmt.executeUpdate("insert into discharge_details (dis_dest,dis_outcome,dis_date) values ('"+a+"','"+b+"','"+c+":"+d+":"+e+"')");// execute query in table student
System.out.println("1");
rs = stmt.getResultSet();
stmt.close();
con.close();
}
catch (Exception err) {
System.out.println("ERROR: " + err);
}
}
}
}
执行后显示此错误。
ERROR: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
基于此...
cb1=new JComboBox();
for(int i=1;i<=31;i++)
{
if(i<10)
{
cb1.addItem("0"+i);
}
else
{
cb1.addItem(i);
}
}
你有一个混合的值,对于低于 10
的值,它们是 String
,高于它们,它们是 int
s...
现在,通常我建议使用 ListCellRenderer
来更改这些值的外观,但在您的情况下,将它们全部设为 String
s[=27= 可能更简单]
cb1=new JComboBox();
for(int i=1;i<=31;i++)
{
if(i<10)
{
cb1.addItem("0"+i);
}
else
{
cb1.addItem(Integer.toString(i));
}
}
然后当您需要该值时,您需要执行类似...
String text = (String)cb1.getSelectedItem();
int value = Integer.parseInt(text);
或者(可以说,更正确),您可以使用 ListCellRenderer
,这将允许您更改值在 JComboBox
中呈现时的外观方式,例如.. .
public class NumberListCellEditor extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
if (value instanceof Integer) {
int number = (Integer) value;
if (number < 10) {
value = "0" + number;
}
}
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
return this;
}
}
例如...
然后你可以简单地做一些像...
JComboBox cb = new JComboBox<Integer>();
cb.setRenderer(new NumberListCellEditor());
for (int i = 1; i <= 31; i++) {
cb.addItem(i);
}
然后就不需要关心首先将值转换为 String
int value = (Integer)cb1.getSelectedItem();
看看
了解更多详情
我正在使用 JComboBox 将整数值作为 input.Tell 我可以使用哪个函数从组合框中获取值。
我的组合框将具有这些值。
cb1=new JComboBox();
for(int i=1;i<=31;i++)
{
if(i<10)
{
cb1.addItem("0"+i);
}
else
{
cb1.addItem(i);
}
}
我用这个函数来获取值。
int c=(Integer)cb1.getSelectedItem();
但它在我的代码中显示了这个错误。
我的代码如下。
Discharge_screen()
{
l = new JLabel("Discharge screen");
l.setHorizontalAlignment(SwingConstants.CENTER);
l.setVerticalAlignment(SwingConstants.CENTER);
l.setBackground(Color.GRAY);
l.setOpaque(true);
l1 = new JLabel("Discharge Destination");
l1.setBackground(Color.LIGHT_GRAY);
l1.setOpaque(true);
l2 = new JLabel("Discharge outcome");
l2.setBackground(Color.LIGHT_GRAY);
l2.setOpaque(true);
l3 = new JLabel("Discharge date");
l3.setBackground(Color.LIGHT_GRAY);
l3.setOpaque(true);
cb1=new JComboBox();
for(i=1;i<=31;i++)
{
if(i<10)
{
cb1.addItem("0"+i);
}
else
{
cb1.addItem(i);
}
}
cb2=new JComboBox();
for(i=1;i<=12;i++)
{
if(i<10)
{
cb2.addItem("0"+i);
}
else
{
cb2.addItem(i);
}
}
cb3=new JComboBox();
for(i=1950;i<=2015;i++)
{
cb3.addItem(i);
}
b1=new JButton("Submit");
b2=new JButton("Back to home");
t1=new JTextField();
t2=new JTextField();
panel = new JPanel();
panel.setLayout(null);
l.setBounds(100,40,225,35);
l1.setBounds(100,100,100,25);
t1.setBounds(205,100,125,25);
l2.setBounds(100,130,100,25);
t2.setBounds(205,130,125,25);
l3.setBounds(100,160,100,25);
cb1.setBounds(205,160,50,25);
cb2.setBounds(260,160,50,25);
cb3.setBounds(315,160,75,25);
b1.setBounds(100,190,100,25);
b2.setBounds(205,190,125,25);
panel.add(l);
panel.add(l1);
panel.add(t1);
panel.add(l2);
panel.add(t2);
panel.add(l3);
panel.add(cb1);
panel.add(cb2);
panel.add(cb3);
panel.add(b1);
panel.add(b2);
add(panel,BorderLayout.CENTER);
b1.addActionListener(this);
b2.addActionListener(this);
setTitle("Discharge screen");
setSize(450,400);
}
@Override
public void actionPerformed(ActionEvent event)
{
// TODO Auto-generated method stub
if(event.getSource()==b1)
{
Connection con = null;
Statement stmt=null;
ResultSet rs=null;
String a,b;
int c,d,e;
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String accessFileName = "C:\Users\dinesh\Documents\employee";
String connURL="jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+accessFileName+".accdb";
con = DriverManager.getConnection(connURL, "","");
stmt = con.createStatement();
a=t1.getText();
b=t2.getText();
c=(Integer) cb1.getSelectedItem();
System.out.println(c);
d=(Integer) cb2.getSelectedItem();
e=(Integer) cb3.getSelectedItem();
stmt.executeUpdate("insert into discharge_details (dis_dest,dis_outcome,dis_date) values ('"+a+"','"+b+"','"+c+":"+d+":"+e+"')");// execute query in table student
System.out.println("1");
rs = stmt.getResultSet();
stmt.close();
con.close();
}
catch (Exception err) {
System.out.println("ERROR: " + err);
}
}
}
}
执行后显示此错误。
ERROR: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
基于此...
cb1=new JComboBox();
for(int i=1;i<=31;i++)
{
if(i<10)
{
cb1.addItem("0"+i);
}
else
{
cb1.addItem(i);
}
}
你有一个混合的值,对于低于 10
的值,它们是 String
,高于它们,它们是 int
s...
现在,通常我建议使用 ListCellRenderer
来更改这些值的外观,但在您的情况下,将它们全部设为 String
s[=27= 可能更简单]
cb1=new JComboBox();
for(int i=1;i<=31;i++)
{
if(i<10)
{
cb1.addItem("0"+i);
}
else
{
cb1.addItem(Integer.toString(i));
}
}
然后当您需要该值时,您需要执行类似...
String text = (String)cb1.getSelectedItem();
int value = Integer.parseInt(text);
或者(可以说,更正确),您可以使用 ListCellRenderer
,这将允许您更改值在 JComboBox
中呈现时的外观方式,例如.. .
public class NumberListCellEditor extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
if (value instanceof Integer) {
int number = (Integer) value;
if (number < 10) {
value = "0" + number;
}
}
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
return this;
}
}
例如...
然后你可以简单地做一些像...
JComboBox cb = new JComboBox<Integer>();
cb.setRenderer(new NumberListCellEditor());
for (int i = 1; i <= 31; i++) {
cb.addItem(i);
}
然后就不需要关心首先将值转换为 String
int value = (Integer)cb1.getSelectedItem();
看看
了解更多详情