JButton 无法转换为 javax.swing.JComboBox
JButton cannot be cast to javax.swing.JComboBox
所以我试图让我的程序在 JComboBox 中有 2 个选项,并且这两个选项应该有一个(不同的)最大数量,它可以在它告诉你一条消息重新开始之前达到。
但是当我单击检查选择了哪个 JComboBox 选项以及小计是什么的按钮时,我得到一个 javax.swing.JButton cannot be cast to javax.swing.JComboBox 异常。
我对编程和 Java 还很陌生,我的教科书中没有解释 JComboBox 的使用,所以我基本上已经卡了几个小时了...
请忽略代码行之间的荷兰语注释:D
package applicatieschool;
// Opstartklasse creëren
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
// Frame maken
public class ApplicatieSchool extends JFrame {
public static void main( String args[] ) {
JFrame frame = new ApplicatieSchool(); // JFrame-object aanmaken
frame.setSize( 1200, 500 ); // Grootte JFrame
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); // Hierdoor kan het JFrame afgesloten woorden
frame.setTitle( "School Applicatie "); // Title geven aan JFrame
frame.setContentPane( new Werkpaneel() ); // JPanel aan JFrame toevoegen
frame.setVisible( true ); // Object zichtbaar maken op het scherm
}
}
// JPanel aanmaken
class Werkpaneel extends JPanel {
// Declareren van 3 integers ( gehele getallen )
private JTextField invoerVak1, invoerVak2, uitvoerVak1, uitvoerVak2, uitvoerVak3;
private JLabel invoerLabel1, invoerLabel2, uitvoerLabel1, uitvoerLabel2;
private JButton berekenTotaalKnop, resetTotaalKnop;
private Pallet pallet;
private JComboBox dozenLijst;
private int a, b, c, d;
// Constructor creëren
public Werkpaneel() {
setLayout( new GridLayout( 20, 5 ) );
Border border = BorderFactory.createEmptyBorder( 5 ,5 ,5 ,5 );
setBorder( border );
a = 2376;
b = 2088;
c = 396;
d = 348;
String[] dozen = {"Doos Type 1", "Doos Type 2"};
dozenLijst = new JComboBox( dozen );
dozenLijst.addActionListener( new LijstHandler() );
pallet = new Pallet();
// 3 tekstvakken maken
invoerVak1 = new JTextField( 10 );
invoerVak1.addActionListener( new Invoervak1Handler() );
invoerVak2 = new JTextField( 10 );
invoerVak2.addActionListener( new Invoervak1Handler() );
uitvoerVak1 = new JTextField( 10 );
uitvoerVak1.addActionListener( new Invoervak1Handler() );
uitvoerVak1.setEditable( false );
uitvoerVak2 = new JTextField( 10 );
uitvoerVak2.addActionListener( new Invoervak1Handler() );
uitvoerVak2.setEditable( false );
uitvoerVak3 = new JTextField( 40 );
uitvoerVak3.setEditable( false );
// 3 labels maken
invoerLabel1 = new JLabel( "Aantal stuks totaal");
invoerLabel2 = new JLabel( "Aantal in een doos" );
uitvoerLabel1 = new JLabel( "Aantal dozen" );
uitvoerLabel2 = new JLabel( "Totaal aantal dozen " );
berekenTotaalKnop = new JButton( "Totaal");
berekenTotaalKnop.addActionListener( new BerekenTotaalHandler() );
resetTotaalKnop = new JButton( "Reset die shit ");
resetTotaalKnop.addActionListener( new ResetHandler() );
// Toevoegen aan het paneel
add( dozenLijst );
add( invoerLabel1 );
add( invoerVak1 );
add( invoerLabel2 );
add( invoerVak2 );
add( uitvoerLabel1 );
add( uitvoerVak1 );
add( uitvoerLabel2 );
add( uitvoerVak2 );
add( berekenTotaalKnop );
add( resetTotaalKnop );
add( uitvoerVak3 );
}
class LijstHandler implements ActionListener {
public void actionPerformed( ActionEvent e ) {
JComboBox<String> cb = (JComboBox<String>) e.getSource();
String selectie = (String) cb.getSelectedItem();
if ( selectie.equals("Doos Type 1") ) {
uitvoerVak3.setText( "U kunt maximaal 2376 stuks op een pallet stapelen ");
}
else if( selectie.equals("Doos Type 2" ) ) {
uitvoerVak3.setText( "U kunt maximaal 2088 stuks op een pallet stapelen " );
}
}
}
class Invoervak1Handler implements ActionListener {
public void actionPerformed( ActionEvent e ) {
String invoer1 = invoerVak1.getText();
double invoerGetal1 = Double.parseDouble( invoer1 );
String invoer2 = invoerVak2.getText();
double invoerGetal2 = Double.parseDouble( invoer2 );
double uitvoerGetal = ( invoerGetal1 / invoerGetal2 );
uitvoerVak1.setText( "" + uitvoerGetal );
pallet.telOp( uitvoerGetal );
double st = pallet.getSubtotaal();
}
}
// Totale aantal berekenen
class BerekenTotaalHandler implements ActionListener {
public void actionPerformed( ActionEvent e ) {
uitvoerVak2.setText( String.format( "%.2f", pallet.getSubtotaal() ) );
JComboBox<String> cb = (JComboBox<String>) e.getSource();
String selectie = (String) cb.getSelectedItem();
if ( selectie.equals("Doos Type 1") && pallet.getSubtotaal() > c ) {
uitvoerVak3.setText( "MAXIMUM HOOGTE BEREIKT, BEGIN MET STAPELEN OP EEN NIEUWE PALLET ");
}
else if( selectie.equals("Doos Type 2") && pallet.getSubtotaal() > d ) {
uitvoerVak3.setText( "MAXIMUM HOOGTE BEREIKT, BEGIN MET STAPELEN OP EEN NIEUWE PALLET ");
/* if ( pallet.getSubtotaal() > c ) {
uitvoerVak3.setText( "MAXIMUM HOOGTE BEREIKT, BEGIN MET STAPELEN OP EEN NIEUWE PALLET ");
*/
}
// else statement?5
}
}
// alle velden leegmaken
class ResetHandler implements ActionListener {
public void actionPerformed( ActionEvent e ) {
invoerVak1.setText( "" );
invoerVak2.setText( "" );
uitvoerVak1.setText( "" );
uitvoerVak2.setText( "" );
pallet.reset();
}
}
}
这一行有问题:
JComboBox<String> cb = (JComboBox<String>) e.getSource();
e.getSource()
returns 对被单击并触发事件的按钮的引用。您将此 JButton
对象转换为导致错误的 JComboBox
引用。要解决此问题,请替换
JComboBox<String> cb = (JComboBox<String>) e.getSource();
String selectie = (String) cb.getSelectedItem();
和
String selectie = (String) dozenLijst.getSelectedItem();
如果你的错误是关于转换即我得到一个 javax.swing.JButton cannot be cast to javax.swing.JComboBox exception.,那么问题应该指向
JComboBox<String> cb = (JComboBox<String>) e.getSource();
可能事件侦听器正在侦听您的按钮点击,您必须处理该逻辑。
在 BerekenTotaalHandler 的 actionPerformed 中,您将 e.getSource() 转换为 JComboBox。源实际上是 JButton berekenTotaalKnop,这意味着当您按下该按钮时,它将导致此异常。您需要以不同的方式访问您的组合框——将动作侦听器设置为工作面板 class 的私有内部 class 并直接访问它可能是最简单的方法。
所以我试图让我的程序在 JComboBox 中有 2 个选项,并且这两个选项应该有一个(不同的)最大数量,它可以在它告诉你一条消息重新开始之前达到。
但是当我单击检查选择了哪个 JComboBox 选项以及小计是什么的按钮时,我得到一个 javax.swing.JButton cannot be cast to javax.swing.JComboBox 异常。
我对编程和 Java 还很陌生,我的教科书中没有解释 JComboBox 的使用,所以我基本上已经卡了几个小时了...
请忽略代码行之间的荷兰语注释:D
package applicatieschool;
// Opstartklasse creëren
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
// Frame maken
public class ApplicatieSchool extends JFrame {
public static void main( String args[] ) {
JFrame frame = new ApplicatieSchool(); // JFrame-object aanmaken
frame.setSize( 1200, 500 ); // Grootte JFrame
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); // Hierdoor kan het JFrame afgesloten woorden
frame.setTitle( "School Applicatie "); // Title geven aan JFrame
frame.setContentPane( new Werkpaneel() ); // JPanel aan JFrame toevoegen
frame.setVisible( true ); // Object zichtbaar maken op het scherm
}
}
// JPanel aanmaken
class Werkpaneel extends JPanel {
// Declareren van 3 integers ( gehele getallen )
private JTextField invoerVak1, invoerVak2, uitvoerVak1, uitvoerVak2, uitvoerVak3;
private JLabel invoerLabel1, invoerLabel2, uitvoerLabel1, uitvoerLabel2;
private JButton berekenTotaalKnop, resetTotaalKnop;
private Pallet pallet;
private JComboBox dozenLijst;
private int a, b, c, d;
// Constructor creëren
public Werkpaneel() {
setLayout( new GridLayout( 20, 5 ) );
Border border = BorderFactory.createEmptyBorder( 5 ,5 ,5 ,5 );
setBorder( border );
a = 2376;
b = 2088;
c = 396;
d = 348;
String[] dozen = {"Doos Type 1", "Doos Type 2"};
dozenLijst = new JComboBox( dozen );
dozenLijst.addActionListener( new LijstHandler() );
pallet = new Pallet();
// 3 tekstvakken maken
invoerVak1 = new JTextField( 10 );
invoerVak1.addActionListener( new Invoervak1Handler() );
invoerVak2 = new JTextField( 10 );
invoerVak2.addActionListener( new Invoervak1Handler() );
uitvoerVak1 = new JTextField( 10 );
uitvoerVak1.addActionListener( new Invoervak1Handler() );
uitvoerVak1.setEditable( false );
uitvoerVak2 = new JTextField( 10 );
uitvoerVak2.addActionListener( new Invoervak1Handler() );
uitvoerVak2.setEditable( false );
uitvoerVak3 = new JTextField( 40 );
uitvoerVak3.setEditable( false );
// 3 labels maken
invoerLabel1 = new JLabel( "Aantal stuks totaal");
invoerLabel2 = new JLabel( "Aantal in een doos" );
uitvoerLabel1 = new JLabel( "Aantal dozen" );
uitvoerLabel2 = new JLabel( "Totaal aantal dozen " );
berekenTotaalKnop = new JButton( "Totaal");
berekenTotaalKnop.addActionListener( new BerekenTotaalHandler() );
resetTotaalKnop = new JButton( "Reset die shit ");
resetTotaalKnop.addActionListener( new ResetHandler() );
// Toevoegen aan het paneel
add( dozenLijst );
add( invoerLabel1 );
add( invoerVak1 );
add( invoerLabel2 );
add( invoerVak2 );
add( uitvoerLabel1 );
add( uitvoerVak1 );
add( uitvoerLabel2 );
add( uitvoerVak2 );
add( berekenTotaalKnop );
add( resetTotaalKnop );
add( uitvoerVak3 );
}
class LijstHandler implements ActionListener {
public void actionPerformed( ActionEvent e ) {
JComboBox<String> cb = (JComboBox<String>) e.getSource();
String selectie = (String) cb.getSelectedItem();
if ( selectie.equals("Doos Type 1") ) {
uitvoerVak3.setText( "U kunt maximaal 2376 stuks op een pallet stapelen ");
}
else if( selectie.equals("Doos Type 2" ) ) {
uitvoerVak3.setText( "U kunt maximaal 2088 stuks op een pallet stapelen " );
}
}
}
class Invoervak1Handler implements ActionListener {
public void actionPerformed( ActionEvent e ) {
String invoer1 = invoerVak1.getText();
double invoerGetal1 = Double.parseDouble( invoer1 );
String invoer2 = invoerVak2.getText();
double invoerGetal2 = Double.parseDouble( invoer2 );
double uitvoerGetal = ( invoerGetal1 / invoerGetal2 );
uitvoerVak1.setText( "" + uitvoerGetal );
pallet.telOp( uitvoerGetal );
double st = pallet.getSubtotaal();
}
}
// Totale aantal berekenen
class BerekenTotaalHandler implements ActionListener {
public void actionPerformed( ActionEvent e ) {
uitvoerVak2.setText( String.format( "%.2f", pallet.getSubtotaal() ) );
JComboBox<String> cb = (JComboBox<String>) e.getSource();
String selectie = (String) cb.getSelectedItem();
if ( selectie.equals("Doos Type 1") && pallet.getSubtotaal() > c ) {
uitvoerVak3.setText( "MAXIMUM HOOGTE BEREIKT, BEGIN MET STAPELEN OP EEN NIEUWE PALLET ");
}
else if( selectie.equals("Doos Type 2") && pallet.getSubtotaal() > d ) {
uitvoerVak3.setText( "MAXIMUM HOOGTE BEREIKT, BEGIN MET STAPELEN OP EEN NIEUWE PALLET ");
/* if ( pallet.getSubtotaal() > c ) {
uitvoerVak3.setText( "MAXIMUM HOOGTE BEREIKT, BEGIN MET STAPELEN OP EEN NIEUWE PALLET ");
*/
}
// else statement?5
}
}
// alle velden leegmaken
class ResetHandler implements ActionListener {
public void actionPerformed( ActionEvent e ) {
invoerVak1.setText( "" );
invoerVak2.setText( "" );
uitvoerVak1.setText( "" );
uitvoerVak2.setText( "" );
pallet.reset();
}
}
}
这一行有问题:
JComboBox<String> cb = (JComboBox<String>) e.getSource();
e.getSource()
returns 对被单击并触发事件的按钮的引用。您将此 JButton
对象转换为导致错误的 JComboBox
引用。要解决此问题,请替换
JComboBox<String> cb = (JComboBox<String>) e.getSource();
String selectie = (String) cb.getSelectedItem();
和
String selectie = (String) dozenLijst.getSelectedItem();
如果你的错误是关于转换即我得到一个 javax.swing.JButton cannot be cast to javax.swing.JComboBox exception.,那么问题应该指向
JComboBox<String> cb = (JComboBox<String>) e.getSource();
可能事件侦听器正在侦听您的按钮点击,您必须处理该逻辑。
在 BerekenTotaalHandler 的 actionPerformed 中,您将 e.getSource() 转换为 JComboBox。源实际上是 JButton berekenTotaalKnop,这意味着当您按下该按钮时,它将导致此异常。您需要以不同的方式访问您的组合框——将动作侦听器设置为工作面板 class 的私有内部 class 并直接访问它可能是最简单的方法。