diff --git a/designer-base/src/main/java/com/fr/design/gui/imenutable/UIMenuTable.java b/designer-base/src/main/java/com/fr/design/gui/imenutable/UIMenuTable.java index 488b449939..ddee51dc5b 100644 --- a/designer-base/src/main/java/com/fr/design/gui/imenutable/UIMenuTable.java +++ b/designer-base/src/main/java/com/fr/design/gui/imenutable/UIMenuTable.java @@ -6,17 +6,10 @@ import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.UIDialog; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itable.UITable; -import com.fr.design.hyperlink.ReportletHyperlinkPane; -import com.fr.design.hyperlink.WebHyperlinkPane; -import com.fr.design.javascript.EmailPane; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.js.EmailJavaScript; -import com.fr.js.ReportletHyperlink; -import com.fr.js.WebHyperlink; import org.jetbrains.annotations.NotNull; import javax.swing.JComponent; -import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.SwingUtilities; @@ -27,10 +20,10 @@ import javax.swing.table.TableCellRenderer; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; -import java.util.ArrayList; import java.util.List; public class UIMenuTable extends JTable { + private static final int STEP = 2; protected int selectedRowIndex = -1; protected int rollOverRowIndex = -1; protected int draggingIndex = -1; @@ -201,47 +194,35 @@ public class UIMenuTable extends JTable { this.draggingIndex = rowIndex; } + /** + * 触发变更通知 + */ public void fireTargetChanged() { repaint(); Object[] listeners = listenerList.getListenerList(); - for (int i = listeners.length - 2; i >= 0; i -= 2) { + for (int i = listeners.length - STEP; i >= 0; i -= STEP) { if (listeners[i] == ChangeListener.class) { ((ChangeListener) listeners[i + 1]).stateChanged(new ChangeEvent(this)); } } } + /** + * 添加变更监听 + * + * @param l 监听对象 + */ public void addChangeListener(ChangeListener l) { this.listenerList.add(ChangeListener.class, l); } + /** + * 删除变更监听 + * + * @param l 监听对象 + */ public void removeChangeListener(ChangeListener l) { this.listenerList.remove(ChangeListener.class, l); } - - public static void main(String... args) { - JFrame jf = new JFrame("test"); - jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - JPanel content = (JPanel) jf.getContentPane(); - content.setLayout(new BorderLayout()); - List data = new ArrayList(); - UIMenuNameableCreator reportlet = new UIMenuNameableCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Reportlet"), - new ReportletHyperlink(), ReportletHyperlinkPane.class); - - UIMenuNameableCreator email = new UIMenuNameableCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Email"), - new EmailJavaScript(), EmailPane.class); - - UIMenuNameableCreator web = new UIMenuNameableCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Hyperlink_Web_Link"), - new WebHyperlink(), WebHyperlinkPane.class); - data.add(reportlet); - data.add(email); - data.add(web); - UIMenuTable pane = new UIMenuTable(); - pane.populateBean(data); - content.add(pane, BorderLayout.CENTER); - GUICoreUtils.centerWindow(jf); - jf.setSize(400, 400); - jf.setVisible(true); - } } diff --git a/designer-base/src/main/java/com/fr/design/gui/itable/UITable.java b/designer-base/src/main/java/com/fr/design/gui/itable/UITable.java index a883742e72..f66d483261 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itable/UITable.java +++ b/designer-base/src/main/java/com/fr/design/gui/itable/UITable.java @@ -5,37 +5,33 @@ import com.fr.design.event.UIObserver; import com.fr.design.event.UIObserverListener; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; -import com.fr.design.utils.gui.GUICoreUtils; import org.jetbrains.annotations.NotNull; import javax.swing.BorderFactory; import javax.swing.JComponent; -import javax.swing.JFrame; -import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.event.CellEditorListener; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.plaf.TableUI; +import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import java.awt.AWTEvent; -import java.awt.BorderLayout; import java.awt.Component; import java.awt.Point; import java.awt.Rectangle; import java.awt.Toolkit; -import java.awt.event.AWTEventListener; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.MouseEvent; -import java.util.ArrayList; import java.util.List; public class UITable extends JTable implements UIObserver { private static final int OFF_LEFT = 10; + private static final int STEP = 2; private static final int DEFAULT_ROW_HEIGHT = 20; private UIObserverListener uiObserverListener; UITableEditor editor; @@ -54,8 +50,6 @@ public class UITable extends JTable implements UIObserver { initComponents(); iniListener(); shouldResponseAwt = false; - // kunsnat: 屏蔽: 对于下拉框, 无法等待选择结果之后在stop.. -// Toolkit.getDefaultToolkit().addAWTEventListener(awt, AWTEvent.MOUSE_EVENT_MASK); } public UITable(int columnSize, boolean needAWTEventListener) { @@ -63,7 +57,12 @@ public class UITable extends JTable implements UIObserver { shouldResponseAwt = needAWTEventListener; isEditingStopped = true; if (needAWTEventListener) { - Toolkit.getDefaultToolkit().addAWTEventListener(awt, AWTEvent.MOUSE_EVENT_MASK); + Toolkit.getDefaultToolkit().addAWTEventListener(event -> { + if (!UITable.this.isShowing()) { + return; + } + doSomeInAll(event); + }, AWTEvent.MOUSE_EVENT_MASK); this.addFocusListener(new FocusAdapter() { public void focusGained(FocusEvent e) { isEditingStopped = false; @@ -87,20 +86,16 @@ public class UITable extends JTable implements UIObserver { } + /** + * 传入列表数据 + * + * @param values 数据 + */ public void populateBean(List values) { getTableDataModel().populateBean(values); } - private AWTEventListener awt = new AWTEventListener() { - public void eventDispatched(AWTEvent event) { - if (!UITable.this.isShowing()) { - return; - } - doSomeInAll(event); - } - }; - private void doSomeInAll(AWTEvent event) { Rectangle bounds = new Rectangle(getLocationOnScreen().x, getLocationOnScreen().y, getWidth(), getHeight()); if (event instanceof MouseEvent) { @@ -118,6 +113,11 @@ public class UITable extends JTable implements UIObserver { } } + /** + * 获取模型中数据 + * + * @return 数据 + */ public List updateBean() { return getTableDataModel().updateBean(); } @@ -223,7 +223,7 @@ public class UITable extends JTable implements UIObserver { setBackground(UIConstants.NORMAL_BACKGROUND); setDefaultEditor(UITable.class, editor); setDefaultRenderer(UITable.class, new UITableRender()); -// setUI(getUI()); + setUI(getUI()); TableColumn deleteTableColumn = new TableColumn(getTableDataModel().getColumnCount()); deleteTableColumn.setCellEditor(null); @@ -243,14 +243,11 @@ public class UITable extends JTable implements UIObserver { private void iniListener() { if (shouldResponseChangeListener()) { - this.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - if (uiObserverListener == null) { - return; - } - uiObserverListener.doChange(); + this.addChangeListener(e -> { + if (uiObserverListener == null) { + return; } + uiObserverListener.doChange(); }); } } @@ -295,6 +292,11 @@ public class UITable extends JTable implements UIObserver { return new UITableUI(); } + @Override + public TableCellEditor getDefaultEditor(Class columnClass) { + return super.getDefaultEditor(UITable.class); + } + @Override public TableCellRenderer getDefaultRenderer(Class columnClass) { // 处理null的情况用于创建时未指定数据结构的情况 @@ -342,7 +344,7 @@ public class UITable extends JTable implements UIObserver { repaint(); Object[] listeners = listenerList.getListenerList(); - for (int i = listeners.length - 2; i >= 0; i -= 2) { + for (int i = listeners.length - STEP; i >= 0; i -= STEP) { if (listeners[i] == ChangeListener.class) { ((ChangeListener) listeners[i + 1]).stateChanged(new ChangeEvent(this)); } @@ -366,31 +368,4 @@ public class UITable extends JTable implements UIObserver { public void removeChangeListener(ChangeListener l) { this.listenerList.remove(ChangeListener.class, l); } - - /** - * 测试主函数 - * - * @param args 参数 - */ - public static void main(String... args) { - JFrame jf = new JFrame("test"); - jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - JPanel content = (JPanel) jf.getContentPane(); - content.setLayout(new BorderLayout()); - List data = new ArrayList(); - String[] a = {"1", "11"}; - String[] b = {"2", "22"}; - String[] c = {"3", "33"}; - String[] d = {"4", "44"}; - data.add(a); - data.add(b); - data.add(c); - data.add(d); - UITable pane = new UITable(2); - pane.populateBean(data); - content.add(pane, BorderLayout.CENTER); - GUICoreUtils.centerWindow(jf); - jf.setSize(400, 400); - jf.setVisible(true); - } -} \ No newline at end of file +}