如何将Swing组件和对象添加到arraylist中的swing组件中?

时间:2016-01-18 19:53:17

标签: java swing

我有一个面板数组列表,它是一个数组列表,因为它们正在进入一个cardlayout。我有一个TabbedPane应该放在数组列表中的每个Panel上,我所做的一切似乎都没有。

尝试在Panel中获取TabbedPane:

    List<CountryPanel> p = new ArrayList<CountryPanel>(Arrays.asList(new CountryPanel("Finland"), new CountryPanel("Sweden"), new CountryPanel("Norway"), new CountryPanel("Estonia")));

    for( int x = 0; x<4; x++ ){
        p.get(x).getPanel().add(new InfoPanel().getTabbedPane());
    }

正在使用的类;

 JPanel card;
 Random random = new Random();
 String name;
 String username;

 public CountryPanel(String name) {

        card = new JPanel(new CardLayout());
        this.name = name;
        this.username = username;


 }

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

 public String getName(){
     return name;
 }
 public JPanel getPanel(){
     return card;
 }

public class InfoPanel extends JPanel {
  private JTable table;
  private JTable table_1;
  static JTabbedPane tabbedPane;
///Giant block of text

public JTabbedPane getTabbedPane(){
    return tabbedPane;
}

为什么这不起作用?

List<CountryPanel> p = new ArrayList<CountryPanel>(Arrays.asList(new CountryPanel("Finland"), new CountryPanel("Sweden"), new CountryPanel("Norway"), new CountryPanel("Estonia")));
    List<InfoPanel> i = new ArrayList<InfoPanel>(Arrays.asList(new InfoPanel("Finland"), new InfoPanel("Sweden"), new InfoPanel("Norway"), new InfoPanel("Estonia")));
    for( int x = 0; x<4; x++ ){

        countryBox.addItem(p.get(x));
        cardPanel.add(p.get(x), p.get(x).toString());
        System.out.println(p.get(x).toString());
        p.get(x).addGUI(i.get(x).getTabbedPane());
    }

新方法

public void addGUI(JTabbedPane p){
     card.add(p);

 }

1 个答案:

答案 0 :(得分:3)

  

我有一个TabbedPane应该在每个Panel上进行

你做不到。组件只能有一个父组件。这就是Swing使用“模型”的原因。您可以与多个组件共享模型。

你需要:

  1. 为每个面板创建一个新的选项卡式窗格,或

  2. 或让您的框架主要布局为BorderLayout。然后,您可以将选项卡式窗格添加到BorderLayout的“PAGE_START”,然后使用CardLayout将面板添加到BorderLayout的“CENTER”。这将是更好的解决方案。