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
類
什麼關係呢的'JCheckBox'必須選項卡?它們是否包含在標籤標題中?標籤本身?或者是單獨的? – MadProgrammer
選項卡標題,在此處位於自定義組件標籤部分https://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html – Colonder
概念上,您可以執行類似[this](http:// stackoverflow.com/questions/11553112/how-to-add-close-button-to-a-jtabbedpane-tab/11553266#11553266) – MadProgrammer