2016-05-01 45 views
0

考慮兩類:找出在自定義組件選項卡中選擇該複選框

public class Test 
{ 
    private boolean skip = false; 
    private JLabel label = ""; 

    public boolean isSkipped() 
    { 
     return skip; 
    } 

    public void setSkipped(boolean skip) 
    { 
     this.skip = skip; 
    } 

    public void setLabel(String string) 
    { 
     label.setText(string); 
    } 
} 

MainWindow類,我們認爲必須顯示爲簡單的框架所需要的所有字段和方法。這節課,我們也有:

private JTabbedPane tabPane = new JTabbedPane(); 
private ArrayList<Test> test = new ArrayList<>(); 

for(int i = 0; i < 30; i++) 
{ 
    test.add(new Test()); 
} 

JPanel checkBoxTab = new JPanel(); 
JCheckBox checkBox = new JCheckBox(); 

checkBox.addItemListener(new ItemListener() 
{ 
    @Override 
    public void itemStateChanged(ItemEvent e) 
    { 
     if(e.getStateChange() == ItemEvent.SELECTED) 
     { 
      test.get(?).setSkipped(true); 
     } 

     if(e.getStateChange() == ItemEvent.DESELECTED) 
     { 
      test.get(?).setSkipped(false); 
     } 

     for(int j = 0, k = 1; j < test.size(); j++) 
     { 
      if(test.get(j).isSkipped()) 
      { 
        continue; 
      } 

      test.get(j).setLabel("" + k); 
      k++; 
     } 
    } 
}); 

    checkBox.setOpaque(false); 
    checkBoxTab.add(checkBox); 
    checkBoxTab.setOpaque(false); 

for(int i = 0; i < test.size(); i++) 
{ 
    tabPane.addTab("", test.get(i)); 
    tabPane.setTabComponentAt(i, checkBoxTab); 
} 

我的問題是:我怎麼更換已被選定?與標籤的指標的chackbox是什麼?我需要在程序運行期間動態地找到它。此代碼的目的是找出哪個選項卡被選中跳過,跳過它沒有分配下一個數量的k到一個標籤,並分配下一個數字的k標籤在下一個選項卡(假設它沒有被標記爲跳過,如果它是 - 重複以前的過程)。我試圖在這裏瞭解解決方案Close the clicked tab, not the currently selected tab JTabbedPane,但我真的不知道如何實現「標籤內容」。描繪以前我們有:

tabCount: 0 1 2 3 4 5 6 7 8 
skip:  f t f t t f f f t 
label: 1 2  3 4 5 

編輯很抱歉,在MainWindow

+0

什麼關係呢的'JCheckBox'必須選項卡?它們是否包含在標籤標題中?標籤本身?或者是單獨的? – MadProgrammer

+0

選項卡標題,在此處位於自定義組件標籤部分https://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html – Colonder

+0

概念上,您可以執行類似[this](http:// stackoverflow.com/questions/11553112/how-to-add-close-button-to-a-jtabbedpane-tab/11553266#11553266) – MadProgrammer

回答

0

與瘋狂的程序員的評論的幫助下一個錯字,我設法實現我想要的東西

checkBox.addItemListener(new ItemListener() 
{ 
    @Override 
    public void itemStateChanged(ItemEvent e) 
    { 
     if(e.getStateChange() == ItemEvent.SELECTED) 
     { 
      test.get(tabbedPane.indexOfTab(tabName)).setSkipped(true); 
     } 

     if(e.getStateChange() == ItemEvent.DESELECTED) 
     { 
      test.get(tabbedPane.indexOfTab(tabName)).setSkipped(false); 
     } 

     for(int j = 0, k = 1; j < test.size(); j++) 
     { 
      if(test.get(j).isSkipped()) 
      { 
       continue; 
      } 

      test.get(j).setLabel("" + k); 
      k++; 
     } 
    } 
});