【问题标题】:Java GUI panel revalidationJava GUI 面板重新验证
【发布时间】:2015-01-09 20:54:52
【问题描述】:

我有一个控制所有应用程序的主类,包括所有面板的显示。显示主应用程序面板的方法是:

private void displayMainApplicationPanel() {
  String[] columnNames = { "Media ID", "Title", "Pricipal Actors", "Type", "Duration", "Launch Date", "Price",
    "Status" };
ResultSet resultSet = databaseLogicController.showMediaInfo();
String[][] data = parseMediaResultSet(resultSet, 8);

SwingUtilities.invokeLater(new Runnable() {

  @Override
  public void run() {
    graphicController.showMainApplicationPanel(data, columnNames);
    addMainApplicationPanelSearchButtonActionListener();
    addMainApplicationPanelSearchTextFieldKeyListener();
    addMainApplicationPanelShowMyIdButtonActionListener();
    addMainApplicationPanelBorrowMediaButtonActionListener();
    addMainApplicationPanelMakeInternetRezervationButtonActionListener();
    addMainApplicationPanelShowVHSInformationButtonActionListener();
    addMainApplicationPanelShowDVDInformationButtonActionListener();
    addMainApplicationPanelShowInternetRezervationsActionListener();
    addMainApplicationPanelShowClientsInformationButtonActionListener();
    addMainApplicationPanelInsertClientButtonActionListener();
    addMainApplicationPanelInsertMovieButtonActionListener();
    addMainApplicationPanelInsertVHSButtonActionListener();
    addMainApplicationPanelInsertDVDButtonActionListener();
  }
});

}

在那个主面板上,我有一个表格,显示了所有当前的媒体。我希望能够通过搜索功能更新该表。

搜索按钮动作监听的代码是:

private void addMainApplicationPanelSearchButtonActionListener() {
    graphicController.getMainApplicationPanel().addSearchButtonActionListener(new    ActionListener() {

  @Override
  public void actionPerformed(ActionEvent e) {
    String[] columnNames = { "Media ID", "Title", "Pricipal Actors", "Type", "Duration", "Launch Date", "Price",
        "Status" };
    String title = graphicController.getMainApplicationPanel().getSearchTextField().getText();
    ResultSet resultSet = databaseLogicController.showParticularMediaInfo(title);
    String[][] data = parseMediaResultSet(resultSet, 8);

    graphicController.getMainApplicationPanel().setMediaTable(new JTable(data, columnNames));
    graphicController.getMainApplicationPanel().repaint();
    graphicController.getMainApplicationPanel().revalidate();
    graphicController.getMainFrame().repaint();
    graphicController.getMainFrame().revalidate();
  }
});

}

现在,我根据搜索条件在动作侦听器中创建一个新表,并将其设置在主应用程序面板中,然后在主框架和主面板上调用重新绘制和重新验证。为什么没有显示新表格?

【问题讨论】:

    标签: java user-interface repaint


    【解决方案1】:

    现在,我根据搜索条件在动作侦听器中创建一个新表

    不要创建新表。最简单的方法是使用新的 TableModel 更新现有表:

    table.setModel(...);
    

    【讨论】:

      【解决方案2】:

      我不建议你使用这条线

      graphicController.getMainApplicationPanel().setMediaTable(new JTable(data, columnNames));
      

      你可以比((DefaultTableModel)myTable.getModel()).setRowCount(0);((DefaultTableModel)myTable.getModel()).addRow(new Object[]{data1, data2, ...});更好地得到那个表

      【讨论】:

      • 它给了我一个 ClassCastException;
      • 您使用的是什么类型的表模型?投射到它
      • 事情是这样的。我没有更改,也没有更改表模型的任何代码。
      • 尝试myTable.setModel 方法将模型替换为全新的列和行
      猜你喜欢
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 2012-03-02
      • 2011-07-24
      相关资源
      最近更新 更多