2012-02-08 32 views
0

我迷路了:我有的JFrame,在的JFrameJTabbedPane中JTabbedPane中是4个JPanels(标签)。每个的JPanel(制表符)是JScrollPane的的JTable(共:4 JTable中的)。每个JTable我在启动应用程序时使用来自数据库的数据 - 完美无缺。JTable中查看事件

现在我想此刻每个JTable中填充数据,当我点击JTabbedPane中(标签)。我试图:"public class MyTest1Tab extends JPanel implements FocusListener""this.addFocusListener(this);"在构造函数中,我已经实现了focusGained(FocusEvent e) and focusLost(FocusEvent e)方法。但我觉得,这个解决方案是不正确的。

从我的角度来看,我需要像监听点击选项卡上JTabbedPane的或当显示的JTable这是烧制的一些事件。

是否有人知道我怎么可以监听特定JTable中显示?

+0

你要找的选项卡式窗格 – xyz 2012-02-08 09:15:40

+0

由于上一个ChangeListener,做此侦听一些例子。有小问题:它应该返回标签名称或索引。标签名称不好(应用程序是多语言的)。当我将依赖标签索引时,它可以改变吗? - 例如,当我将按钮添加到选项卡,然后关闭四个选项卡中的第二个选项卡,然后将该选项卡添加到(从菜单)时,选项卡将是最后一个。会索引变化? – 1ac0 2012-02-08 09:30:36

+0

好的,在详细阐述了最终的(?)决定之后:tab的顺序基于应用程序启动顺序 - “jTabbedPane.addTab(”Test tab 1“,null,panelTest1,null)”的顺序。即使选项卡已关闭,然后在应用程序生命周期中重新打开,这也不会改变。所以如果选项卡已经在位置0,然后关闭,然后programaticaly在位置4重新打开,索引stil为0. – 1ac0 2012-02-08 14:21:03

回答

2

Now I would like populate data for each JTable at the moment when I click on JTabbedPane (tab).

不这样做,这样一来,因为Swing GUI的是un_responsive或冻结,直到重和长期任务结束了,你要这个TAKS重定向到后台任务,对于Swing GUI的有两种方法

  • Runnable#Thread,发现所有的输出到了Swing GUI必须内的invokeLater()包裹,example

那么这种方式应该是user_non_friendly,让用户更新JTable中的内容从一个JButton

+0

是的,我现在这个数据检索将在后台任务和数据库交谈时,将模态jdialog“请等待,数据加载...“ – 1ac0 2012-02-08 09:54:42

0

我想你应该注册带有JTabbedPane的事件处理程序。它会给你选定的Tab,然后根据你可以填充特定于JTab的Jtable。

例如:

    tabbedPane.addChangeListener(new ChangeListener() { 

     @Override 
     public void stateChanged(ChangeEvent arg0) { 
      // TODO Auto-generated method stub 
      if((((JTabbedPane)arg0.getSource()).getSelectedIndex())==0) 
          { 
           //Load Jtable associated with first JTab 
          } 

     } 
    }); 
+0

当然,经过一些阐述,我检查了如果我有jtabbedpane上的4个选项卡,然后programaticaly关闭并重新打开选项卡,索引将是相同的,如果位置改变无关紧要。索引是基于app第一次启动并且不会改变。 因此每个jpanel都会知道它的索引,并且在主应用程序类中应该是公共静态变量,所以应用程序知道实际打开的选项卡。每个jpanel都会检查这个属性,以便决定是否重新载入数据。 – 1ac0 2012-02-08 14:46:22