GUI如何连接两个框架并移交String数组?

问题描述 投票:0回答:1

我想将一个框架JFrame(WagenGUI)与另一个框架JFrame(ausgewaehlterWagen)连接,并将String array从WagenGUI移交给ausgewaehlerWagen,其中包含在JComboBox中选择的车辆。

我以为我可以将String array交给ausgewaehlterWagen(Wagen =车辆),它可以工作。不幸的是,我遇到了例外。我希望你能帮助我

我想与class wagenGui连接的ausgewaehlterWagen的代码:

package Design;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.JComboBox;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.awt.event.ActionEvent;

public class wagenGUI extends JFrame {

     public static String[] GetStringArray(ArrayList<String> arr) 
        { 

            // declaration and initialise String Array 
            String str[] = new String[arr.size()]; 

            // ArrayList to Array Conversion 
            for (int j = 0; j < arr.size(); j++) { 

                // Assign each value to String array 
                str[j] = arr.get(j); 
            } 

            return str; 
        } 

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    wagenGUI frame = new wagenGUI();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }


    /**
     * Create the frame.
     */
    public wagenGUI() {
        setVisible(true);
        setTitle("Wagen");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 800, 600);
        contentPane = new JPanel();
        contentPane.setBackground(Color.LIGHT_GRAY);
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblAlleWagen = new JLabel("Alle Wagen");
        lblAlleWagen.setFont(new Font("Tahoma", Font.BOLD, 40));
        lblAlleWagen.setBackground(Color.WHITE);
        lblAlleWagen.setBounds(283, 23, 239, 67);
        contentPane.add(lblAlleWagen);


        DBConnect connect = new DBConnect();
        Wagen ListeWagen;
        for (int i=1; i<11;i++) { //erzeugt 10 Wagen
        ListeWagen = new Wagen(i,50.0, true, 0);
        }
        ArrayList <String> AlleWagen = new ArrayList <String>();
        for (int i=1; i<11;i++) {
        int kennzeichen = i;
        int ebennummer = connect.getWagenEbenenummer(i);
        boolean verfuegbar = connect.getWagenVerfuegbar(i);
        double veLimit = connect.getWagenVeLimit(i);
        String verfuegbard="";
        if (verfuegbar == true) {
            verfuegbard = "Verfuegbar";
            AlleWagen.add("Kennzeichen: "+String.valueOf(kennzeichen)+", Ve Limit: "+String.valueOf(veLimit)+", Ebenenummer "+(String.valueOf(ebennummer))+", Status:"+(verfuegbard));
            //System.out.println(AlleWagen);  test
        }
        else {verfuegbard = "nicht Verfuebar";
        AlleWagen.add("Kennzeichen: "+String.valueOf(kennzeichen)+", Ve Limit: "+String.valueOf(veLimit)+", Ebenenummer "+(String.valueOf(ebennummer))+", Status:"+(verfuegbard));
        //System.out.println(AlleWagen);   test
        }
        }
        //System.out.println(AlleWagen); test
        String[] AlleWagenString = GetStringArray(AlleWagen);
        JComboBox comboBoxWagenAuswaehlen = new JComboBox(AlleWagenString);
        comboBoxWagenAuswaehlen.setFont(new Font("Tahoma", Font.BOLD, 17));
        comboBoxWagenAuswaehlen.setBounds(92, 102, 611, 294);
        contentPane.add(comboBoxWagenAuswaehlen);

        JButton btnNewButton = new JButton("Wagen ausw\u00E4hlen");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
            String [] s = ((String[]) comboBoxWagenAuswaehlen.getSelectedItem());


                //augewählter Wagen parameter übergeben.
                new ausgewaehlterWagen(s);
                dispose();
            }
        });
        btnNewButton.setFont(new Font("Tahoma", Font.BOLD, 30));
        btnNewButton.setBounds(181, 426, 406, 34);
        contentPane.add(btnNewButton);

        JButton btnBack = new JButton("zur\u00FCck zum Hauptmen\u00FC");
        btnBack.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                new Hauptmenue();
                dispose();
            }
        });
        btnBack.setFont(new Font("Tahoma", Font.BOLD, 30));
        btnBack.setBounds(181, 486, 406, 34);
        contentPane.add(btnBack);

        JButton button = new JButton("Ausloggen");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                new Login();
                dispose();
            }
        });
        button.setFont(new Font("Tahoma", Font.BOLD, 12));
        button.setBounds(645, 23, 139, 29);
        contentPane.add(button);

        JLabel label = new JLabel("Benutzer:");
        label.setFont(new Font("Tahoma", Font.BOLD, 12));
        label.setBounds(645, 0, 139, 23);
        contentPane.add(label);
    }
}

我需要在其中插入String[]的AusgewaehlterWagen类的代码以完成此命令:

String [] ss = {"",""};
ausgewaehlterWagen frame = new ausgewaehlterWagen(ss);

也许这是错误的?但是我真的不知道如何更改它,因此不需要在此处插入String array

我也想将String array移交给ausgewählterWagen,其中包含所选择的车辆。

public ausgewaehlterWagen(String [] ausgewählterWagen) {



package Design;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.text.Document;


import java.awt.Color;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class ausgewaehlterWagen extends JFrame {

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    String [] ss = {"",""};
                    ausgewaehlterWagen frame = new ausgewaehlterWagen(ss) ;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ausgewaehlterWagen(String [] ausgewählterWagen) {
        setVisible(true);
        setTitle("ausgew\u00E4hlter Wagen");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 800, 600);
        contentPane = new JPanel();
        contentPane.setBackground(Color.LIGHT_GRAY);
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblAusgewhlterWagen = new JLabel("ausgew\u00E4hlter Wagen");
        lblAusgewhlterWagen.setFont(new Font("Tahoma", Font.BOLD, 35));
        lblAusgewhlterWagen.setBackground(Color.WHITE);
        lblAusgewhlterWagen.setBounds(191, 18, 428, 49);
        contentPane.add(lblAusgewhlterWagen);

        JLabel lblPackliste = new JLabel("Packliste");
        lblPackliste.setFont(new Font("Tahoma", Font.BOLD, 35));
        lblPackliste.setBackground(Color.WHITE);
        lblPackliste.setBounds(281, 258, 175, 42);
        contentPane.add(lblPackliste);

        String [] ausgewählterWagen1 = (ausgewählterWagen);
        JComboBox comboBoxAusgewaehlterWagen = new JComboBox(ausgewählterWagen1);
        comboBoxAusgewaehlterWagen.setBounds(116, 78, 503, 82);
        contentPane.add(comboBoxAusgewaehlterWagen);

        JComboBox comboBoxPackliste = new JComboBox();
        comboBoxPackliste.setFont(new Font("Tahoma", Font.BOLD, 30));
        comboBoxPackliste.setBounds(116, 319, 503, 82);
        contentPane.add(comboBoxPackliste);

        JButton btnPacklisteDrucken = new JButton("Packliste drucken");
        btnPacklisteDrucken.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {







        }
        });
        btnPacklisteDrucken.setFont(new Font("Tahoma", Font.BOLD, 30));
        btnPacklisteDrucken.setBounds(181, 435, 416, 42);
        contentPane.add(btnPacklisteDrucken);

        JButton btnBackWagen = new JButton("zur\u00FCck zu den Wagen");
        btnBackWagen.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                new wagenGUI();
                dispose();
            }
        });
        btnBackWagen.setFont(new Font("Tahoma", Font.BOLD, 25));
        btnBackWagen.setBounds(54, 504, 306, 42);
        contentPane.add(btnBackWagen);

        JButton btnBack = new JButton("zur\u00FCck zum Hauptmen\u00FC");
        btnBack.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                new Hauptmenue();
                dispose();
            }
        });
        btnBack.setFont(new Font("Tahoma", Font.BOLD, 25));
        btnBack.setBounds(408, 504, 331, 42);
        contentPane.add(btnBack);

        JLabel lblVerschiebenNach = new JLabel("Verschieben nach:");
        lblVerschiebenNach.setFont(new Font("Tahoma", Font.BOLD, 25));
        lblVerschiebenNach.setBounds(116, 174, 247, 32);
        contentPane.add(lblVerschiebenNach);

        JButton btnVerschieben = new JButton("Verschieben");
        btnVerschieben.setFont(new Font("Tahoma", Font.PLAIN, 20));
        btnVerschieben.setBounds(444, 221, 175, 23);
        contentPane.add(btnVerschieben);

        JComboBox comboBoxVerschieben = new JComboBox();
        comboBoxVerschieben.setBounds(444, 171, 175, 51);
        contentPane.add(comboBoxVerschieben);

        JButton button = new JButton("Ausloggen");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                new Login();
                dispose();
            }
        });
        button.setFont(new Font("Tahoma", Font.BOLD, 12));
        button.setBounds(645, 25, 139, 29);
        contentPane.add(button);

        JLabel label = new JLabel("Benutzer:");
        label.setFont(new Font("Tahoma", Font.BOLD, 12));
        label.setBounds(645, 0, 139, 23);
        contentPane.add(label);
    }
}

单击button“ Wagenauswaehlen”后的输出:

"Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.String;
    at Design.wagenGUI$2.actionPerformed(wagenGUI.java:107)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
java swing user-interface classcastexception
1个回答
0
投票
好吧,它是ClassCastException,它告诉您在哪里。在针对wagenGui的操作的btnNewButton类中,尝试执行String [] s=((String[])comboBoxWagenAuswaehlen.getSelectedItem());。但是getSelectedItem()返回一个String,不能转换为String[]
© www.soinside.com 2019 - 2024. All rights reserved.