2011-06-29 41 views
8

Tôi mới vào Java Swing. Tôi có một số nghi ngờ về các thành phần adiing động trong Swing.java swing tự động thêm các thành phần

Về cơ bản tôi hav một chính JPanel gồm hai tiểu JPanel (leftpanel và rightpanel) mà alligned horizontally.In trái JPanel Tôi hav một số JButtons, khi tôi sẽ click vào JButton tôi Nedd để hiển thị một số JLabel, JTextArea vv theo đúng nghĩa JPanel . Tôi đã thử một mã nhưng nó không hoạt động. Khi tôi bấm vào nút nó đi bên trong chức năng nghe sự kiện nhưng JLabel Tôi không thể xem.

Tôi đang cung cấp mã của mình bên dưới. Xin hãy nhìn vào điều này và sửa tôi. cảm ơn trước

package my; 

    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import javax.swing.BoxLayout; 
    import javax.swing.JButton; 
    import javax.swing.JFrame; 
    import javax.swing.JLabel; 
    import javax.swing.JPanel; 
    import javax.swing.SwingUtilities; 

    /** 
    * 
    * @author root 
    */ 

    public class myAplliwithPanel extends JFrame{ 

     JPanel rightPanel; 

     public myAplliwithPanel() { 
      initGui(); 
     }   

     public void initGui() 
     { 
      JPanel mainPanel=new JPanel(); 
      mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.X_AXIS)); 

      JPanel leftPanel=new JPanel(); 
      leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.Y_AXIS)); 

      rightPanel=new JPanel(); 
      rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.Y_AXIS)); 

      JButton dbBut=new JButton("DB"); 
      JButton appliBut=new JButton("Appli"); 
      appliBut.addActionListener(new ActionListener() { 

       public void actionPerformed(ActionEvent arg0) { 
        JLabel label=new JLabel("dsggs"); 
        rightPanel.add(label); 
       } 
      }); 

      JButton backendBut=new JButton("Backend"); 

      leftPanel.add(dbBut); 
      leftPanel.add(appliBut); 
      leftPanel.add(backendBut);  

      mainPanel.add(leftPanel); 
      mainPanel.add(rightPanel); 

      add(mainPanel); 

      setTitle("System Manger"); 
      setSize(400, 400); 
      setLocationRelativeTo(null); 
      setDefaultCloseOperation(EXIT_ON_CLOSE); 


     } 

    public static void main(String args[]) { 
      SwingUtilities.invokeLater(new Runnable() { 

       public void run() { 
        myAplliwithPanel myObj = new myAplliwithPanel(); 
        myObj.setVisible(true); 
       } 
      }); 
     } 
    } 
+1

tôi edided bài viết của bạn xin vui lòng trở lại nếu không muốn nói là ... – mKorbel

Trả lời

19

Bạn cần phải gọi revalidate sau khi thêm (hoặc loại bỏ) các thành phần:

rightPanel.add(label); 
rightPanel.revalidate(); 

nên làm các trick.

+0

thnks người đàn ông cậu đã cứu tôi – nantitv

+0

tôi đã cố gắng 'validate', 'invalidate',' getParent(). invalidate() 'trước khi tôi tìm kiếm và bây giờ tìm thấy' revalidate() '. Cuối cùng cái gì đó là ** hợp lệ ** !! –

+0

Tôi cũng đã cố gắng vô hiệu, repaint, getParent(). Invalidate()/repaint() (và cả hai cùng nhau), nhưng nó chỉ không làm các trick. Vấn đề của tôi là tôi đã loại bỏ tất cả các thành phần từ một JPanel và sau đó thêm lại chúng và chúng đã xuất hiện khi tôi thu nhỏ/thay đổi kích thước cửa sổ giống như tôi muốn chúng. revalidate() trên Panel, rằng bạn đang thêm các thành phần vào, đã làm các trick cho tôi, quá. Cảm ơn bạn! – Igor

11

gọi

rightPanel.revalidate(); 
rightPanel.repaint(); 

sau khi thêm

+0

đúng vậy tôi đã xóa bài viết của mình +1 – mKorbel

+0

thnks người đàn ông của nó làm việc tốt – nantitv

3

chỉ cần thêm dòng này sau khi bạn thêm nhãn

rightPanel.updateUI();

khi bạn thêm bất kỳ thành phần trong thời gian chạy bạn cần phải cập nhật ui sử dụng phương pháp này

+0

nhờ tất cả các bạn cho một trả lời nhanh chóng và làm việc tốt của nó – nantitv

+0

'updateUI' là để làm với giao diện, không phải là bố trí. –

+0

vậy tôi đang nói gì vậy? Tôi đang nói về giao diện người dùng không phải là giao diện người dùng bố cục cụ thể nghĩa là giao diện. xin vui lòng không đưa ra dấu tiêu cực như thế này cẩn thận về điều này. – Pratik

Các vấn đề liên quan