11package the .bytecode .club .bytecodeviewer .gui .resourceviewer ;
22
33import com .github .weisj .darklaf .components .CloseButton ;
4+ import the .bytecode .club .bytecodeviewer .BytecodeViewer ;
45import the .bytecode .club .bytecodeviewer .gui .components .listeners .MouseClickedListener ;
6+ import the .bytecode .club .bytecodeviewer .gui .resourceviewer .viewer .ResourceViewer ;
57import the .bytecode .club .bytecodeviewer .translation .TranslatedStrings ;
68
79import javax .swing .*;
810import java .awt .*;
911import java .awt .event .MouseEvent ;
1012
11- public class CloseButtonComponent extends JPanel {
13+ public class TabComponent extends JPanel {
1214
13- private final JTabbedPane pane ;
14-
15- public CloseButtonComponent (final JTabbedPane pane ) {
15+ public TabComponent (final JTabbedPane pane ) {
1616 super (new FlowLayout (FlowLayout .LEFT , 0 , 0 ));
1717 if (pane == null ) {
1818 throw new NullPointerException ("TabbedPane is null" );
1919 }
2020
21- this .pane = pane ;
2221 setOpaque (false );
2322 JLabel label = new JLabel () {
2423 public String getText () {
25- int i = pane .indexOfTabComponent (CloseButtonComponent .this );
24+ int i = pane .indexOfTabComponent (TabComponent .this );
2625 if (i != -1 ) {
2726 return pane .getTitleAt (i );
2827 }
@@ -31,8 +30,8 @@ public String getText() {
3130 }
3231 };
3332
34- add (label );
3533 label .setBorder (BorderFactory .createEmptyBorder (0 , 0 , 0 , 5 ));
34+ add (label );
3635 JButton button = new CloseButton ();
3736 add (button );
3837
@@ -49,30 +48,45 @@ public String getText() {
4948 if (e .getButton () != MouseEvent .BUTTON1 ) // left-click
5049 return ;
5150
52- if (pane .indexOfTabComponent (CloseButtonComponent .this ) != -1 )
53- pane .remove (pane .indexOfTabComponent (CloseButtonComponent .this ));
51+ if (pane .indexOfTabComponent (TabComponent .this ) != -1 ) {
52+ int i = pane .indexOfTabComponent (TabComponent .this );
53+ removeTab (i );
54+ pane .remove (pane .indexOfTabComponent (TabComponent .this ));
55+ }
5456 }));
5557
5658 closeTab .addActionListener (e ->
5759 {
58- if (pane .indexOfTabComponent (CloseButtonComponent .this ) != -1 )
59- pane .remove (pane .indexOfTabComponent (CloseButtonComponent .this ));
60+ if (pane .indexOfTabComponent (TabComponent .this ) != -1 ) {
61+ int i = pane .indexOfTabComponent (TabComponent .this );
62+ removeTab (i );
63+ pane .remove (pane .indexOfTabComponent (TabComponent .this ));
64+ }
6065 });
66+
6167 closeAllTabs .addActionListener (e ->
6268 {
6369
6470 while (true ) {
6571 if (pane .getTabCount () <= 1 )
6672 return ;
6773
68- if (pane .indexOfTabComponent (CloseButtonComponent .this ) != 0 )
74+ if (pane .indexOfTabComponent (TabComponent .this ) != 0 ) {
75+ removeTab (0 );
6976 pane .remove (0 );
70- else
77+ } else {
78+ removeTab (1 );
7179 pane .remove (1 );
80+ }
7281 }
7382 });
7483
7584 setBorder (BorderFactory .createEmptyBorder (2 , 0 , 0 , 0 ));
7685 }
7786
87+ private void removeTab (int index ) {
88+ ResourceViewer resourceViewer = (ResourceViewer ) BytecodeViewer .viewer .workPane .tabs .getComponentAt (index );
89+ BytecodeViewer .viewer .workPane .openedTabs .remove (resourceViewer .resource .workingName );
90+ }
91+
7892}
0 commit comments