1

JTabbedPane にタブを動的に追加しようとしています。次のコードでこれを行います。

private tab = new JTabbedPane();

frame.add(tab, BorderLayout.CENTER);

public void newTab(String tab){
      JPanel panel1 = new JPanel();
      JTextArea tArea = new JTextArea();
      panel1.add(tArea);
      tab.add(tab, panel1);
      }

問題は、テキスト領域の名前をクラス全体で表示できるようにする必要があるため、後で追加できるようになり、そこに多くのタブを追加できるようにして、各テキスト領域に異なる名前を付ける必要があることです。

何か案は?

4

2 に答える 2

1

Listの aを使用する必要がありますJTextArea

private final List<JTextArea> areas = new ArrayList<JTextArea>();

public void newTab(String tab){
      JPanel p = new JPanel();
      JTextArea tArea = new JTextArea();
      p.add(tArea);
      tab.add(tab, p);
      areas.add(tArea);
}

または a Map(タブのタイトルが一意の場合のみ)。

private final Map<String, JTextArea> areas = new HashMap<String, JTextArea>();

public void newTab(String tab){
      JPanel p = new JPanel();
      JTextArea tArea = new JTextArea();
      p.add(tArea);
      tab.add(tab, p);
      areas.put(tab, tArea);
}
于 2012-11-07T23:24:38.677 に答える
0

名前の衝突の問題があります

public void newTab(String tab){ // <-- tab declared as String here
    JPanel panel1 = new JPanel();
    JTextArea tArea = new JTextArea();
    panel1.add(tArea);
    tab.add(tab, panel1); // <-- tab (String) doesn't have an add method - error~~
}

次のようなものを試してください:

public void newTab(String tabName){
    JPanel panel1 = new JPanel();
    JTextArea tArea = new JTextArea();
    panel1.add(tArea);
    tab.add(tabName, panel1); // <-- Now we know which tab we're talking about ;)
}

その代わり

それが解決されたらMap、@mercutio による提案された使用は正常に機能するはずです

于 2012-11-07T23:59:13.317 に答える