0

過去 2 日間で多くのことを考えてみましたが、フレームを更新できません:/ データベースに接続して選択クエリを作成します... コンソール ウィンドウに、フォームにも 4 つの ID が表示されます。 .. データベースに別のデータを作成した後、コンソール ウィンドウに 5 つの ID が表示されますが、フォームには 4 がframe.setvisible表示されます...ボタンを配置すると、別のフォームが表示されます...

これが私のクラスです:

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;
}
}

私に何ができる?

4

1 に答える 1

1

コンストラクター内で DB からデータを取得しないでください。この方法では、フォームを更新することはできません。データは作成時にのみ読み込まれます。データ取得ロジックを別のメソッドに移動し、ボタン クリック ハンドラーで呼び出します。

あなたが今持っているものは、元のフォームを更新するのではなく、新しいフォームを作成するだけです. そのため、その部分のコメントを外すと、setVisible別のフォームが開きます。

于 2013-05-12T14:11:13.940 に答える