Tôi gặp phải một vấn đề nhỏ, mã của tôi có ngoại lệ.
Tôi có một lớp khung cơ bản:
nhập java.awt.BorderLayout;
nhập java.awt.Color;
nhập java.awt.Dimension;
nhập java.awt.FlowLayout;
nhập java.awt.GridLayout;
nhập javax.swing.JButton;
nhập javax.swing.JFrame;
nhập javax.swing.JLabel;
nhập javax.swing.JPanel;
nhập javax.swing.JTextField;
lớp công khai BaseFrame mở rộng JFrame {
riêng tư BaseListener người nghe = new BaseListener();
Chuỗi tĩnh cuối cùng BTN_END = "Ende";
Chuỗi tĩnh cuối cùng BTN_OK = "Ok";
JButton riêng tư bu_end = null;
JButton riêng tư bu_ok = null;
BaseFrame công khai() {
super();
khởi tạo();
}
khởi tạo khoảng trống riêng tư () {
JPanel pa_01 = JPanel mới();
JPanel pa_02 = JPanel mới();
JPanel pa_03 = JPanel mới();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(BorderLayout mới(0, 0));
this.setPreferredSize(New Dimension(800, 600));
this.setMinimumSize(Kích thước mới (800, 600));
this.add(pa_01, BorderLayout.NORTH);
this.add(pa_02, BorderLayout.CENTER);
this.add(pa_03, BorderLayout.SOUTH);
pa_01.setLayout(FlowLayout.CENTER,10,5) mới);
pa_01.add(JLabel mới("Rennwagenverwaltung"));
pa_01.setPreferredSize(Kích thước mới (800, 60));
pa_02.setLayout(GridLayout mới(8, 2));
pa_02.add(JLabel mới("Rennwagenid"));
pa_02.add(JTextField mới());
pa_02.add(JLabel mới("Modell"));
pa_02.add(JTextField mới());
pa_02.add(JLabel mới("Hersteller"));
pa_02.add(JTextField mới());
pa_02.add(JLabel mới("Leistung"));
pa_02.add(JTextField mới());
pa_02.add(JLabel mới("Hubraum"));
pa_02.add(JTextField mới());
pa_02.add(new JLabel("maximaler Tankinhalt"));
pa_02.add(JTextField mới());
pa_02.add(JLabel mới("aktueller Tankinhalt"));
pa_02.add(JTextField mới());
bu_end = JButton mới(BaseFrame.BTN_END);
bu_end.addActionListener(người nghe);
bu_ok = JButton mới(BaseFrame.BTN_OK);
bu_ok.addActionListener(người nghe);
pa_02.add(bu_end);
pa_02.add(bu_ok);
pa_02.setPreferredSize(Kích thước mới (800, 350));
pa_03.setBackground(Color.WHITE);
pa_03.setPreferredSize(Kích thước mới (800, 200));
this.setTitle("Rennwagen");
this.setVisible(true);
this.pack();
this.setLocationRelativeTo(null);
}
}
Lớp người nghe của tôi:
nhập java.awt.event.ActionEvent;
nhập java.awt.event.ActionListener;
nhập java.awt.event.WindowEvent;
nhập javax.swing.JButton;
nhập javax.swing.JFrame;
nhập javax.swing.JLayeredPane;
nhập javax.swing.JPanel;
nhập javax.swing.JRootPane;
lớp công khai BaseListener
triển khai ActionListener
{
public void actionPerformed(ActionEvent e)
{
Đối tượng đối tượng = e.getSource();
JButton bu_work = null;
Khung JFrame = null;
Chuỗi văn bản = null;
if (đối tượng instanceof JButton)
{
đối tượng bu_work = (JButton);
văn bản = bu_work.getText();
frame = this.getMyJFrame(bu_work);
if(text == BaseFrame.BTN_OK) {
Rennwagen rw = null;
} else if(text == BaseFrame.BTN_END) {
frame.dispatchEvent(New WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
}
}
}
/**
* Nút @param
* @trở lại
*/
BaseFrame riêng tư getMyJFrame(nút JButton)
{
JPanel contenpane = null;
JLayeredPane layeredpane = null;
JRootPane rootpane = null;
BaseFrame myframe = null;
contentpane = (JPanel) nút.getParent();
layeredpane = (JLayeredPane) contenpane.getParent();
rootpane = (JRootPane) layeredpane.getParent();
myframe = (BaseFrame) rootpane.getParent();
trả lại khung hình của tôi;
}
}
Bây giờ tôi có kỳ vọng này ở dòng này:
layeredpane = (JLayeredPane) contenpane.getParent();
Đây là toàn bộ nhật ký lỗi:
Ngoại lệ trong chuỗi "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JPanel không thể chuyển sang javax.swing.JLayeredPane
tại Rennwagen.BaseListener.getMyJFrame(BaseListener.java:50)
tại Rennwagen.BaseListener.actionPerformed(BaseListener.java:27)
tại javax.swing.AbstractButton.fireActionPerformed (Nguồn không xác định)
tại javax.swing.AbstractButton$Handler.actionPerformed (Nguồn không xác định)
tại javax.swing.DefaultButtonModel.fireActionPerformed (Nguồn không xác định)
tại javax.swing.DefaultButtonModel.setPressed(Không rõ nguồn)
tại javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Không rõ nguồn)
tại java.awt.Component.processMouseEvent (Nguồn không xác định)
tại javax.swing.JComponent.processMouseEvent (Nguồn không xác định)
tại java.awt.Component.processEvent (Nguồn không xác định)
tại java.awt.Container.processEvent (Nguồn không xác định)
tại java.awt.Component.dispatchEventImpl (Nguồn không xác định)
tại java.awt.Container.dispatchEventImpl(Nguồn không xác định)
tại java.awt.Component.dispatchEvent (Nguồn không xác định)
tại java.awt.LightweightDispatcher.retargetMouseEvent (Nguồn không xác định)
tại java.awt.LightweightDispatcher.processMouseEvent(Không rõ nguồn)
tại java.awt.LightweightDispatcher.dispatchEvent(Không rõ nguồn)
tại java.awt.Container.dispatchEventImpl(Nguồn không xác định)
tại java.awt.Window.dispatchEventImpl(Nguồn không xác định)
tại java.awt.Component.dispatchEvent (Nguồn không xác định)
tại java.awt.EventQueue.dispatchEventImpl (Nguồn không xác định)
tại java.awt.EventQueue.access$400(Không rõ nguồn)
tại java.awt.EventQueue$3.run(Không rõ nguồn)
tại java.awt.EventQueue$3.run(Không rõ nguồn)
tại java.security.AccessController.doPrivileged(Phương thức gốc)
tại java.security.ProtectionDomain$1.doIntersectionPrivilege(Không rõ nguồn)
tại java.security.ProtectionDomain$1.doIntersectionPrivilege(Không rõ nguồn)
tại java.awt.EventQueue$4.run(Không rõ nguồn)
tại java.awt.EventQueue$4.run(Không rõ nguồn)
tại java.security.AccessController.doPrivileged(Phương thức gốc)
tại java.security.ProtectionDomain$1.doIntersectionPrivilege(Không rõ nguồn)
tại java.awt.EventQueue.dispatchEvent (Nguồn không xác định)
tại java.awt.EventDispatchThread.pumpOneEventForFilters(Không rõ nguồn)
tại java.awt.EventDispatchThread.pumpEventsForFilter(Không rõ nguồn)
tại java.awt.EventDispatchThread.pumpEventsForHierarchy(Không rõ nguồn)
tại java.awt.EventDispatchThread.pumpEvents(Không rõ nguồn)
tại java.awt.EventDispatchThread.pumpEvents(Không rõ nguồn)
tại java.awt.EventDispatchThread.run(Không rõ nguồn)
Tại sao điều này là không thể và tôi đang làm gì sai ở đây?
Tôi là một lập trình viên xuất sắc, rất giỏi!