首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不能将JButton转换为javax.swing.JComboBox

不能将JButton转换为javax.swing.JComboBox
EN

Stack Overflow用户
提问于 2018-06-14 04:50:28
回答 3查看 557关注 0票数 0

所以我试图让我的程序在一个JComboBox中有两个选项,这两个选项应该有一个(不同的)最大值,在它告诉你重新开始之前它可以达到的最大值。

但是,当我单击按钮来检查选择了哪个JComboBox选项以及小计是什么时,我得到了一个javax.swing.JButton cannot be cast to javax.swing.JComboBox异常。

我是编程和Java的新手,使用JComboBox在我的课本上没有解释,所以我现在基本上已经被卡住了几个小时……

请忽略代码行之间的荷兰语注释:D

代码语言:javascript
复制
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();
        }
    }



}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-14 04:54:29

问题出在这一行:

代码语言:javascript
复制
JComboBox<String> cb = (JComboBox<String>) e.getSource();

e.getSource()返回对被单击并触发事件的按钮的引用。您将此JButton对象强制转换为导致错误的JComboBox引用。要解决此问题,请替换

代码语言:javascript
复制
JComboBox<String> cb = (JComboBox<String>) e.getSource();
String selectie = (String) cb.getSelectedItem();

使用

代码语言:javascript
复制
String selectie = (String) dozenLijst.getSelectedItem();
票数 0
EN

Stack Overflow用户

发布于 2018-06-14 04:54:36

如果您的错误是关于强制转换,即I get a javax.swing.JButton cannot be cast to javax.swing.JComboBox exception。,那么问题应该指向

代码语言:javascript
复制
JComboBox<String> cb = (JComboBox<String>) e.getSource();

可能事件监听器正在监听您的按钮单击,而您必须处理该逻辑。

票数 1
EN

Stack Overflow用户

发布于 2018-06-14 04:58:33

在BerekenTotaalHandler的actionPerformed中,您将e.getSource()转换为JComboBox。源实际上是JButton berekenTotaalKnop,这意味着当您点击该按钮时,它将导致此异常。您将需要以一种不同的方式访问您的组合框--最简单的方法可能是将操作侦听器设置为工作面板类的私有内部类,然后直接访问它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50846066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档