01/10/2018, 12:34

Lỗi cấp phát bộ nhớ trong java?

-Em có ý định code lên 1 button, khi click vào button đó thì bắt sự kiện và hiện ra 2 JTabbedPane là 2 tab
-Nhưng lạ là khi chia phương thức để làm từng phần (tức là khởi tạo thông qua 1 hàm khác-em post code ở dưới reply) thì lại dính phải bug khi ấn vào button thì ko hiện gì cả, nhưng khi zoom cái Frame to hoặc nhỏ thì lại hiên lên 2 tab như mong đợi ?
-Và em có làm 1 đoạn code ko chia hàm(tất cả các khởi tạo của các biến toàn cục trong phương thức khởi tạo hết) thì lại chạy ngon
-Cho em hỏi tại sao lại vậy? Có phải lỗi ở cấp phát- thu hồi bộ nhớ của 1 thể hiện trong 1 phương thức?

1,Đây là kết quả chạy:(Sau khi đã bấm vào button vẫn ko thay đổi gì?)


2,Khi zoom Frame ra toàn màn hình thì lại hiện đc 2 tab như sau

Em sẽ post code ở dưới cho đõ loạn mắt

Làm lại từ đầu viết 14:48 ngày 01/10/2018
public class b extends JFrame implements ActionListener
{
    JPanel panel,panelx;
    JButton btn;
    JTabbedPane pane;
    JPanel panel1;
    JPanel panel2;
    b()
    {
        panel = createPanel();
    }
    public JPanel createPanel()
    {
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.setBorder(new EtchedBorder());
        panel.add(btn = createButton(),BorderLayout.NORTH);
        this.add(panel);
        return panel;
    }
    public JButton createButton()
    {
        JButton bt = new JButton();
        bt.setText("Click");
        bt.addActionListener(this);
        return bt;
    }
    public JTabbedPane createPane()
    {
        JTabbedPane tab = new JTabbedPane();
        tab.add("tab1",panel1 = createTab());
        tab.add("tab2",panel2 = createTab());
        return tab;
    }
    public JPanel createTab()
    {
        JPanel panel = new JPanel();
        return panel;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==btn)
        {
            panel.add(pane = createPane(),BorderLayout.CENTER);
        }
    } 
}
Nguyễn Ngọc Thật viết 14:39 ngày 01/10/2018

Theo mình thì sau khi add vào, tuy là đã add vào nhưng vẫn chưa repaint lại JFrame ban đầu. Khi bạn kéo ra, kéo vô thì JFrame đã được repaint lại và kết quả là mọi thứ như mọng đợi.

Làm lại từ đầu viết 14:47 ngày 01/10/2018

Tuyệt vời ạ ! ~_~ Em search google mãi ko ra đc vấn đề! Cảm ơn anh rất rất nhiều ạ

Bài liên quan
0