From 6e7c2a616ba72f4829f9db86fd77c096858f9db6 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Fri, 30 Sep 2022 15:33:37 +0200 Subject: [PATCH] updated CHANGELOG.md for PR #595 and added tab context menu test --- CHANGELOG.md | 1 + .../flatlaf/testing/FlatContainerTest.java | 69 ++++++++++++++++--- .../flatlaf/testing/FlatContainerTest.jfd | 14 +++- 3 files changed, 72 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb725905..2e5371aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ FlatLaf Change Log - ComboBox and Spinner: Fixed missing arrow buttons if preferred height is zero. Minimum width of arrow buttons is 3/4 of default width. +- TabbedPane: Switch and close tabs on left mouse click only. (PR #595) ## 2.5 diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatContainerTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatContainerTest.java index 187120ce..6460617d 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatContainerTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatContainerTest.java @@ -19,7 +19,9 @@ package com.formdev.flatlaf.testing; import static com.formdev.flatlaf.FlatClientProperties.*; import java.awt.*; import java.awt.event.ActionEvent; +import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import javax.swing.*; @@ -430,14 +432,14 @@ public class FlatContainerTest } private void customWheelScrollingChanged() { - if( custoMouseWheelScroller != null ) { + if( customMouseWheelScroller != null ) { for( FlatTabbedPane tabbedPane : allTabbedPanes ) - tabbedPane.removeMouseWheelListener( custoMouseWheelScroller ); - custoMouseWheelScroller = null; + tabbedPane.removeMouseWheelListener( customMouseWheelScroller ); + customMouseWheelScroller = null; } if( customWheelScrollingCheckBox.isSelected() ) { - custoMouseWheelScroller = new MouseWheelListener() { + customMouseWheelScroller = new MouseWheelListener() { @Override public void mouseWheelMoved( MouseWheelEvent e ) { if( e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL ) { @@ -451,7 +453,45 @@ public class FlatContainerTest } }; for( FlatTabbedPane tabbedPane : allTabbedPanes ) - tabbedPane.addMouseWheelListener( custoMouseWheelScroller ); + tabbedPane.addMouseWheelListener( customMouseWheelScroller ); + } + } + + private void contextMenuChanged() { + if( contextMenuListener != null ) { + for( FlatTabbedPane tabbedPane : allTabbedPanes ) + tabbedPane.removeMouseListener( contextMenuListener ); + contextMenuListener = null; + } + + if( contextMenuCheckBox.isSelected() ) { + contextMenuListener = new MouseAdapter() { + @Override + public void mousePressed( MouseEvent e ) { + popupMenu( e ); + } + @Override + public void mouseReleased( MouseEvent e ) { + popupMenu( e ); + } + private void popupMenu( MouseEvent e ) { + if( !e.isPopupTrigger() ) + return; + + JTabbedPane tabbedPane = (JTabbedPane) e.getComponent(); + int tabIndex = tabbedPane.indexAtLocation( e.getX(), e.getY() ); + if( tabIndex < 0 ) + return; + + JPopupMenu popupMenu = new JPopupMenu(); + popupMenu.add( "item 1" ); + popupMenu.add( "item 2" ); + popupMenu.add( "item 3" ); + popupMenu.show( tabbedPane, e.getX(), e.getY() ); + } + }; + for( FlatTabbedPane tabbedPane : allTabbedPanes ) + tabbedPane.addMouseListener( contextMenuListener ); } } @@ -515,6 +555,7 @@ public class FlatContainerTest secondTabWiderCheckBox = new JCheckBox(); hideTabAreaWithOneTabCheckBox = new JCheckBox(); customWheelScrollingCheckBox = new JCheckBox(); + contextMenuCheckBox = new JCheckBox(); CellConstraints cc = new CellConstraints(); //======== this ======== @@ -546,11 +587,11 @@ public class FlatContainerTest splitPane1.setOneTouchExpandable(true); //---- panel15 ---- - panel15.setBackground(new Color(217, 163, 67)); + panel15.setBackground(new Color(0xd9a343)); splitPane1.setLeftComponent(panel15); //---- panel21 ---- - panel21.setBackground(new Color(98, 181, 67)); + panel21.setBackground(new Color(0x62b543)); splitPane1.setRightComponent(panel21); } splitPane3.setLeftComponent(splitPane1); @@ -563,7 +604,7 @@ public class FlatContainerTest //======== panel12 ======== { - panel12.setBackground(new Color(242, 101, 34)); + panel12.setBackground(new Color(0xf26522)); panel12.setLayout(new BorderLayout()); //---- label3 ---- @@ -576,7 +617,7 @@ public class FlatContainerTest //======== panel13 ======== { - panel13.setBackground(new Color(64, 182, 224)); + panel13.setBackground(new Color(0x40b6e0)); panel13.setLayout(new BorderLayout()); //---- label4 ---- @@ -636,6 +677,7 @@ public class FlatContainerTest "[]para" + "[]" + "[]" + + "[]" + "[]")); //---- tabScrollCheckBox ---- @@ -828,6 +870,11 @@ public class FlatContainerTest customWheelScrollingCheckBox.setText("Custom wheel scrolling"); customWheelScrollingCheckBox.addActionListener(e -> customWheelScrollingChanged()); tabbedPaneControlPanel.add(customWheelScrollingCheckBox, "cell 2 11"); + + //---- contextMenuCheckBox ---- + contextMenuCheckBox.setText("Context menu on tabs"); + contextMenuCheckBox.addActionListener(e -> contextMenuChanged()); + tabbedPaneControlPanel.add(contextMenuCheckBox, "cell 2 12"); } panel9.add(tabbedPaneControlPanel, cc.xywh(1, 11, 3, 1)); } @@ -875,10 +922,12 @@ public class FlatContainerTest private JCheckBox secondTabWiderCheckBox; private JCheckBox hideTabAreaWithOneTabCheckBox; private JCheckBox customWheelScrollingCheckBox; + private JCheckBox contextMenuCheckBox; // JFormDesigner - End of variables declaration //GEN-END:variables private FlatTabbedPane[] allTabbedPanes; - private MouseWheelListener custoMouseWheelScroller; + private MouseWheelListener customMouseWheelScroller; + private MouseListener contextMenuListener; //---- enum TabPlacement -------------------------------------------------- diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatContainerTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatContainerTest.jfd index d909cb64..05a8a2f5 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatContainerTest.jfd +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatContainerTest.jfd @@ -1,4 +1,4 @@ -JFDML JFormDesigner: "7.0.3.1.342" Java: "16" encoding: "UTF-8" +JFDML JFormDesigner: "8.0.0.0.194" Java: "17.0.2" encoding: "UTF-8" new FormModel { contentType: "form/swing" @@ -132,7 +132,7 @@ new FormModel { add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestFrame$NoRightToLeftPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { "$layoutConstraints": "insets 0,hidemode 3" "$columnConstraints": "[][fill][]" - "$rowConstraints": "[center][][][][][][]para[][]para[][][]" + "$rowConstraints": "[center][][][][][][]para[][]para[][][][]" } ) { name: "tabbedPaneControlPanel" "opaque": false @@ -529,6 +529,16 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 2 11" } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "contextMenuCheckBox" + "text": "Context menu on tabs" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "contextMenuChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 12" + } ) }, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) { "gridY": 11 "gridWidth": 3