在java中从JComboBox获取字符串值
我正在做一个testJComboBox程序。一旦我选择了jCombobox的输出,我就会得到我需要的字符串值。但是,它不起作用 这是我的代码:在java中从JComboBox获取字符串值,java,swing,debugging,jcombobox,Java,Swing,Debugging,Jcombobox,我正在做一个testJComboBox程序。一旦我选择了jCombobox的输出,我就会得到我需要的字符串值。但是,它不起作用 这是我的代码: import java.awt.*; import javax.swing.*; import java.awt.event.*; public class TestJCB extends JFrame { private JLabel genderL; private JComboBox genderJCB; private
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class TestJCB extends JFrame {
private JLabel genderL;
private JComboBox genderJCB;
private String[] test = {"male", "female"};
private JButton gB;
public TestJCB() {
setSize(400, 400);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
setVisible(true);
JPanel frame = new JPanel();
frame.setSize(400, 400);
frame.setLocation(0, 0);
frame.setLayout(null);
frame.setVisible(true);
JLabel genderL = new JLabel("Gender");
genderL.setBounds(10, 200, 100, 30);
JComboBox genderJCB = new JComboBox(test);
genderJCB.setBounds(60, 10, 100, 30);
JButton gB = new JButton("Gender");
gB.setBounds(10, 50, 60, 30);
aaa a = new aaa();
gB.addActionListener(a);
frame.add(genderL);
frame.add(genderJCB);
frame.add(gB);
add(frame);
}
public class aaa implements ActionListener {
public void actionPerformed(ActionEvent sHandler) {
if (genderJCB.getSelectedItem().equals("female")) {
System.out.print("yes");
} else {
System.out.print("no");
}
}
}
public static void main(String[] args) {
TestJCB test = new TestJCB();
test.setVisible(true);
}
}
我还尝试了combo.getEditor().getItem()
,但没有成功
我还尝试了combo.getEditor().getItem(),但没有成功
您最重要的问题是,您声明了从未使用或初始化过的变量
private JComboBox genderJCB;
因为在publicTestJCB()中{
重写并创建了
JComboBox genderJCB = new JComboBox(test);// same issue with JLabel too
如果您想在ActionPerformed
中列出,请将其更改为
genderJCB = new JComboBox(test);
最好是读取错误是一个NullPointerException。如果(genderJCB.getSelectedItem().equals(“女性”){,它会在这里抛出
。发生这种情况是因为genderJCB为null。这是为什么?您没有在这里设置它JComboBox genderJCB=new JComboBox(test)不。您创建了一个新的局部变量,而不是一个字段,因此您从未声明该字段。这里有一个可行的解决方案
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class main extends JFrame
{
private JLabel genderL;
private JComboBox genderJCB;
private String[] test = { "male", "female" };
private JButton gB;
public main( )
{
setSize( 400, 400 );
setLocationRelativeTo( null );
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setLayout( null );
setVisible( true );
JPanel frame = new JPanel( );
frame.setSize( 400, 400 );
frame.setLocation( 0, 0 );
frame.setLayout( null );
frame.setVisible( true );
JLabel genderL = new JLabel( "Gender" );
genderL.setBounds( 10, 200, 100, 30 );
JComboBox genderJCB = new JComboBox( test );
genderJCB.setBounds( 60, 10, 100, 30 );
JButton gB = new JButton( "Gender" );
gB.setBounds( 10, 50, 60, 30 );
aaa a = new aaa( genderJCB );
gB.addActionListener( a );
frame.add( genderL );
frame.add( genderJCB );
frame.add( gB );
add( frame );
}
public class aaa implements ActionListener
{
private JComboBox genderJCB;
public aaa( JComboBox genderJCB )
{
this.genderJCB = genderJCB;
}
public void actionPerformed( ActionEvent sHandler )
{
if( genderJCB.getSelectedItem( ).equals( "female" ) )
{
System.out.print( "yes" );
}
else
{
System.out.print( "no" );
}
}
}
public static void main( String[] args )
{
main test = new main( );
test.setVisible( true );
}
}
永远不要进行任何手动大小调整/定位(又称:null或absoluteLayout)!而是使用合适的LayoutManager。@kleopatra,使用null布局是否不合适?我是否应该重新编码gui并为我的程序使用合适的LayoutManager?