重新加载/刷新按钮上的JFrame窗口点击

问题描述:

我在过去两天尝试了很多想法,我只是无法刷新框架:/ 我连接到我的数据库并进行选择查询......在我的控制台窗口我在窗体上看到4个ID-s ...在我的数据库中创建另一个数据后,在我的控制台窗口中,我看到了5个ID-s,但是在窗体4上...如果我在按钮上放置另一个窗体frame.setvisible似乎......重新加载/刷新按钮上的JFrame窗口点击

这里是我的类:

JLabel timeLabel; 


private JPanel contentPane; 
private ArrayList<JLabel> lbllist= new ArrayList<JLabel>(); 
private ArrayList<JButton> btnlist= new ArrayList<JButton>(); 
static int brojac = 0; 
private JLabel lblNewLabel; 
private JButton btnRefresh; 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 


       Mainframe = new Main(); 
       frame.setVisible(true); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 
      //constructor (I need every time to see data from the database) 
       public Main() { 


    getContentPane().setLayout(null); 

    lblNewLabel = new JLabel("New label"); 
    lblNewLabel.setBounds(0, 185, 46, 14); 
    getContentPane().add(lblNewLabel); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 800, 300); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 

    getContentPane().removeAll(); 
    btnRefresh = new JButton("Refresh"); 
    btnRefresh.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      do_btnRefresh_actionPerformed(arg0); 
     } 
    }); 
    btnRefresh.setBounds(335, 228, 89, 23); 
    contentPane.add(btnRefresh); 

    EntityManager em = Connection.getEmf().createEntityManager(); 
    TypedQuery<Entity> query = em.createQuery(
      "select n from Entityn where finished= 0", 
      PokusajNarudzbe.class); 
    List<Entity> resultList = query.getResultList(); 
    int a = 20; 
    for (Entitypokusaj entity: resultList) { 

     System.err.println(entity.getName());//here i see all data (but not 
                //in the form 

     JLabel list= new JLabel(entity.getBrojName()); 
     lista.setBounds(10, a, 200, 20); 
     lista.setText(entity.getNarudzbaID() + " " 
       + entity.Name() + " "; 
     lbllist.add(list); 
     getContentPane().add(list); 
     list.setVisible(true); 
     list.repaint(); 
     list.revalidate(); 
     JButton btn= new JButton(entity.getName()); 
     btn.setBounds(500, a, 200, 20); 
     btn.setText("Gotovo"); 
     btnlist.add(btn); 
     getContentPane().add(btn); 
     a += 20; 
     gumb.setVisible(true); 
     gumb.repaint(); 
     gumb.revalidate(); 
    } 

    getContentPane().repaint(); 
    resultList.clear(); 
    em.clear(); 
    em.close(); 

} 
`    protected void do_btnRefresh_actionPerformed(ActionEvent arg0) { 
    Main frame1 = new Main(); 
    SwingUtilities.updateComponentTreeUI(frame1); 
    frame1.invalidate(); 
    frame1.validate(); 
    frame1.repaint(); 
//  frame1.revalidate(); 
//  frame1.setVisible(true); (if I uncomment this another form apears...) 

} 


@Override 
public int read(CharBuffer arg0) throws IOException { 
    // TODO Auto-generated method stub 
    return 0; 
} 
} 

我能做些什么?

您不应该从构造函数中的数据库中获取数据。这样你就不能更新表单 - 它只在数据被创建时才加载。将数据提取逻辑移至单独的方法,并在您的按钮点击处理程序中调用它。

你现在所拥有的只会创建新的表单,而不会更新原来的表单。这就是为什么如果您取消注释setVisible部分另一个表单打开。

+0

It work :)))))))))))))))) 非常感谢您 – xXxJAVAxXx 2013-05-12 14:21:58

+0

只需再回答一个问题... 如何在没有按钮的情况下每30秒重新加载一次此表单? – xXxJAVAxXx 2013-05-12 14:35:11

+0

使用计时器 - 请参阅[这里](http://stackoverflow.com/questions/6260744/how-do-i-set-up-a-jframe-with-a-refresh-rate)。 – dratewka 2013-05-12 14:38:08