2011-06-21 7 views
6

Trong hộp thoại, tôi cần hiển thị một nhóm điều khiển nếu một số kết hợp được chọn và một nhóm điều khiển khác. I.e. Tôi cần 2 lớp và tôi cần phải chuyển đổi giữa chúng khi combo được kiểm tra/bỏ chọn. Làm thế nào tôi có thể làm điều đó?cách thay đổi giao diện người dùng tùy thuộc vào lựa chọn hộp kết hợp

Cảm ơn

+0

nền tảng gì và ngôn ngữ? –

Trả lời

14

CardLayout hoạt động tốt cho điều này, như được đề xuất bên dưới.

enter image description here

import java.awt.BorderLayout; 
import java.awt.CardLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Random; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

/** @see http://stackoverflow.com/questions/6432170 */ 
public class CardPanel extends JPanel { 

    private static final Random random = new Random(); 
    private static final JPanel cards = new JPanel(new CardLayout()); 
    private static final JComboBox combo = new JComboBox(); 
    private final String name; 

    public CardPanel(String name) { 
     this.name = name; 
     this.setPreferredSize(new Dimension(320, 240)); 
     this.setBackground(new Color(random.nextInt())); 
     this.add(new JLabel(name)); 
    } 

    @Override 
    public String toString() { 
     return name; 
    } 

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

      @Override 
      public void run() { 
       create(); 
      } 
     }); 
    } 

    private static void create() { 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     for (int i = 1; i < 9; i++) { 
      CardPanel p = new CardPanel("Panel " + String.valueOf(i)); 
      combo.addItem(p); 
      cards.add(p, p.toString()); 
     } 
     JPanel control = new JPanel(); 
     combo.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       JComboBox jcb = (JComboBox) e.getSource(); 
       CardLayout cl = (CardLayout) cards.getLayout(); 
       cl.show(cards, jcb.getSelectedItem().toString()); 
      } 
     }); 
     control.add(combo); 
     f.add(cards, BorderLayout.CENTER); 
     f.add(control, BorderLayout.SOUTH); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 
} 
+1

cảm ơn kick JComboBox + CardLayout +1 – mKorbel

+2

Xem thêm [ví dụ] liên quan này (http://stackoverflow.com/questions/5654926/implementing-back-forward-buttons-in-swing/5655843#5655843). – trashgod

+0

Ví dụ này mở rộng 'JPanel' để thêm tên, nhưng [' Component'] (http://download.oracle.com/javase/6/docs/api/java/awt/Component.html) có 'getName() 'và' setName() 'phương pháp thay thế. – trashgod