我有一个面板数组列表,它是一个数组列表,因为它们正在进入一个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);
}
答案 0 :(得分:3)
我有一个TabbedPane应该在每个Panel上进行
你做不到。组件只能有一个父组件。这就是Swing使用“模型”的原因。您可以与多个组件共享模型。
你需要:
为每个面板创建一个新的选项卡式窗格,或
或让您的框架主要布局为BorderLayout。然后,您可以将选项卡式窗格添加到BorderLayout的“PAGE_START”,然后使用CardLayout将面板添加到BorderLayout的“CENTER”。这将是更好的解决方案。