我的应用程序处理患者记录。在主框架中,用户可以打开多个内部框架。每个内部框架都包含一个选项卡式窗格,并且用户创建的每个选项卡都包含一个表单,用户可以在其中输入患者的数据,以及一个jtable,其中显示了所有已添加的患者。
当用户单击jtable中的一行(患者)时,该表单的字段将填充有患者的数据,而当他按下“转义”时,该表单的字段将被清除,用户可以继续搜索/检查/输入另一位患者。
我的问题是此转义键事件在我使用的Substance look and feel中引发了classCastException。我为执行的动作编写的代码效果很好。自从我开始使用选项卡式窗格(在单个窗格中完成所有操作之前)以来,出现了此问题。如果我将外观更改为例如Windows,则不会引发异常。你有什么主意吗?
这是代码示例:
private void db_existKeyReleased(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
if(evt.getKeyCode()==KeyEvent.VK_ESCAPE)
{
searchField.requestFocusInWindow(); // if user doesn't want to process any of the entries shown to the table
if(searchField.getText().length()>=1) // focus goes to search field and data pane fields are cleared form previous shows
{
dataPane.setPid(-1);
dataPane.getPersonalDataPane().clearAll();
treat_diagPane.getDiagnosis_pane().clearAll();
treat_diagPane.getTreat_pane().clearAll();
}
DefaultTableModel model=new DefaultTableModel(
new Object [][] {
},
new String [] {
bundle.getString("lname"), bundle.getString("fname"), bundle.getString("date_birth"), bundle.getString("occupation")
});
db_exist.setModel(model);
}
这是抛出的异常:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JTabbedPane cannot be cast to javax.swing.JDesktopPane
at javax.swing.plaf.basic.BasicDesktopPaneUI$Actions.actionPerformed(BasicDesktopPaneUI.java:329)
at org.jvnet.lafwidget.tabbed.TabPagerWidget$4.actionPerformed(TabPagerWidget.java:158)
这是导致异常的代码:
public void actionPerformed(ActionEvent e) {
JDesktopPane dp = (JDesktopPane)e.getSource();
String key = getName();
if (CLOSE == key || MAXIMIZE == key || MINIMIZE == key ||
RESTORE == key) {
setState(dp, key);
}
else if (ESCAPE == key) {
if (sourceFrame == dp.getSelectedFrame() &&
focusOwner != null) {
focusOwner.requestFocus();
}
moving = false;
resizing = false;
sourceFrame = null;
focusOwner = null;
}
最佳答案
您提到您已切换为使用JTabbedPane,但是在您的“actionPerformed”方法代码中,您仍然转换为“JDesktopPane”,并且堆栈跟踪显示:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException:
javax.swing.JTabbedPane cannot be cast to javax.swing.JDesktopPane at
javax.swing.plaf.basic.BasicDesktopPaneUI$Actions.actionPerformed
可能将其更改为:
if(e.getSource() instanceof JTabbedPane) {
JTabbedPane = (JTabbedPane)e.getSource();
}
可能是您需要做的更改。