Betrachten wir zwei Klassen:Finden Sie heraus, welche Option in benutzerdefinierten Komponente Registerkarten ausgewählt wurde
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);
}
}
und MainWindow
Klasse, die wir annehmen, dass hat alle Felder und Methoden für einfachen Rahmen erforderlich angezeigt werden. In dieser Klasse haben wir auch:
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);
}
Meine Frage ist: Wie ersetze ich die ?
Zeichen mit dem Index der Registerkarte, die die chackbox hat, die ausgewählt wurde? Ich muss es während des Programmlaufs dynamisch finden. Der Zweck dieses Codes besteht darin, herauszufinden, welche Registerkarte ausgewählt wurde, sie zu überspringen, sie ohne Zuweisung der nächsten Zahl von k zu einer Markierung zu überspringen und die nächste Zahl von k der nächsten Registerkarte zuzuweisen (vorausgesetzt, sie ist nicht zum Überspringen markiert und wenn es ist - wiederhole den vorherigen Prozess. Ich habe versucht, die Lösung hier zu verstehen Close the clicked tab, not the currently selected tab JTabbedPane, aber ich sehe nicht wirklich, wie ich das "Tab Content" -Ding implementieren könnte. Abgebildet vorherige wir haben:
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
EDIT leider ein Tippfehler in MainWindow
Klasse
Welche Beziehung hat der 'JCheckBox' haben die Registerkarte? Sind sie in der Kopfzeile der Registerkarte enthalten? Die Registerkarte selbst? Oder sind die getrennt? – MadProgrammer
Tab-Header wie hier im Abschnitt Tabs mit benutzerdefinierten Komponenten https://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html – Colonder
Konzeptionell könnten Sie etwas tun wie [dies] (http: // stackoverflow.com/questions/11553112/how-to-add-close-button-to-a-jtabbedpane-tab/11553266#11553266) – MadProgrammer