📄 decoratordemopanel.java
字号:
return; Object old = getFindModus(); this.findModus = value; updateDecorators(); firePropertyChange("findModus", old, getFindModus()); } /** * returns the current find modus. * * @return */ public String getFindModus() { return findModus; } /** * returns array of available find modi. * * @return */ public String[] getFindModi() { // @todo: return copy! return findModi; } /** * callback for findNext action. * */ public void findNext() { int foundIndex = table.getSearchable().search(patternModel.getPattern(), patternModel .getFoundIndex()); patternModel.setFoundIndex(foundIndex); } // ----------------- create control bindings private void bind() { BindingHandler bindings = new BindingHandler(); bindings.setAutoCommit(true); bindModusControl(bindings); bindPatternModel(bindings); bindActions(bindings); bindings.pull(); } private void bindActions(BindingHandler bindings) { findNextAction.registerCallback(this, "findNext"); nextButton.setAction(findNextAction); } private void bindModusControl(BindingHandler bindings) { // Enumeration not working correctly with classes // different from string (?) JavaBeanDataModel dataModel = null; try { EnumeratedMetaData meta = new EnumeratedMetaData("findModus", String.class, "Find Modus"); meta.setEnumeration(getFindModi()); dataModel = new JavaBeanDataModel(getClass(), this, new MetaData[] { meta }); } catch (IntrospectionException e) { // TODO Auto-generated catch block e.printStackTrace(); } bindings.add(BindingFactory.getInstance().createBinding( radioGroup, dataModel, "findModus")); bindings.add(BindingFactory.getInstance().createMetaBinding( radioGroupLabel, dataModel, "findModus")); } private void bindPatternModel(BindingHandler bindings) { patternModel = new PatternModel(); // init DataModel JavaBeanDataModel dataModel = null; try { dataModel = new JavaBeanDataModel(patternModel); dataModel.getMetaData("pattern").setReadOnly(true); dataModel.getMetaData("pattern").setLabel("Pattern"); dataModel.getMetaData("rawText").setLabel("Input Text"); } catch (IntrospectionException e) { // TODO Auto-generated catch block e.printStackTrace(); } // ------------------------ create control bindings bindings.add(BindingFactory.getInstance().createBinding( inputText, dataModel, "rawText")); bindings.add(BindingFactory.getInstance().createMetaBinding( inputTextLabel, dataModel, "rawText")); bindings.add(BindingFactory.getInstance().createBinding( patternText, dataModel, "pattern")); bindings.add(BindingFactory.getInstance().createMetaBinding( patternLabel, dataModel, "pattern")); // ------- wire control value changes to presentation changes patternModel.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if ("pattern".equals(evt.getPropertyName())) { updatePattern((Pattern) evt.getNewValue()); } } }); } // ----------------------- create models private TableModel createTableModel() { return new ActionMapTableModel(new JXTable().getActionMap()); } private ListModel createListModel() { JXList list = new JXList(); return new DefaultComboBoxModel(list.getActionMap().allKeys()); } private TreeModel createTreeModel() { // return new FileSystemModel(); return new ActionMapTreeTableModel(new JXTree()); } // ---------------------- init UI /** * This method is called from within the constructor to initialize the form. */ private void initComponents() { table = new JXTable(createTableModel()); // table = new JXTreeTable(new ActionMapTreeTableModel(new // JXTreeTable())); list = new JXList(createListModel()); tree = new JXTree(createTreeModel()); // control components nextButton = new JButton("Find next"); ConstantSize size = LayoutStyle.getCurrent().getRelatedComponentsPadX(); radioGroup = new JXRadioGroup(size.getPixelSize(nextButton)); inputText = new JTextField(); patternText = new JTextField(); } private void build() { // COLUMN SPECS: // f:p:g, l:4dluX:n, f:d:g, l:4dluX:n, f:d:g // ROW SPECS: // c:d:n, t:3dluY:n, f:d:g, t:4dluY:n, c:d:n // // COLUMN GROUPS: {} // ROW GROUPS: {} // // COMPONENT CONSTRAINTS // ( 1, 1, 1, 1, "d=f, d=c"); javax.swing.JLabel "table"; // name=tableLabel // ( 3, 1, 1, 1, "d=f, d=c"); javax.swing.JLabel "list"; name=listLabel // ( 5, 1, 1, 1, "d=f, d=c"); javax.swing.JLabel "tree"; name=treeLabel // ( 1, 3, 1, 1, "d=f, d=f"); javax.swing.JScrollPane; name=table // ( 3, 3, 1, 1, "d=f, d=f"); javax.swing.JScrollPane; name=list // ( 5, 3, 1, 1, "d=f, d=f"); javax.swing.JScrollPane; name=tree // ( 1, 5, 5, 1, "d=f, d=c"); javax.swing.JPanel; name=decoratorcontrol2 // FormLayout formLayout = new FormLayout( "f:p:g, l:4dlu:n, f:d:g, l:4dlu:n, f:d:g", // columns "c:d:n, t:3dlu:n, f:d:g, t:4dlu:n, c:d:n"); // rows PanelBuilder builder = new PanelBuilder(this, formLayout); builder.setDefaultDialogBorder(); CellConstraints cc = new CellConstraints(); CellConstraints cl = new CellConstraints(); // builder.add(new JLabel("JXTable:"), cl.xywh(1, 1, 1, 1)); builder.addLabel("JXTable:", cl.xywh(1, 1, 1, 1), new JScrollPane(table), cc.xywh(1, 3, 1, 1)); builder.addLabel("JXList:", cl.xywh(3, 1, 1, 1), new JScrollPane(list), cc.xywh(3, 3, 1, 1)); builder.addLabel("JXTree:", cl.xywh(5, 1, 1, 1), new JScrollPane(tree), cc.xywh(5, 3, 1, 1)); builder.add(buildControl(), cc.xywh(1, 5, 5, 1)); list.setBorder(listBorder); tree.setBorder(treeBorder); } private JComponent buildControl() { // COLUMN SPECS: // r:p:n, l:4dluX:n, f:max(p;100dluX):n, l:4dluX:n, f:max(p;50dluX):n // ROW SPECS: // c:d:n, t:4dluY:n, c:d:n // // COLUMN GROUPS: {} // ROW GROUPS: {} // // COMPONENT CONSTRAINTS // ( 1, 1, 1, 1, "d=r, d=c"); javax.swing.JLabel "Modus"; name=modus // ( 3, 1, 3, 1, "d=f, d=c"); javax.swing.JPanel; name=moduscontrol // ( 1, 3, 1, 1, "d=r, d=c"); javax.swing.JLabel "Input"; name=input // ( 3, 3, 1, 1, "d=f, d=c"); javax.swing.JTextField; name=searchText // ( 5, 3, 1, 1, "d=f, d=c"); de.kleopatra.view.JButton; name=next // FormLayout formLayout = new FormLayout( "r:p:n, l:4dlu:n, f:max(p;100dlu):n, l:4dlu:n, f:max(p;50dlu):n", // columns "c:d:n, t:4dlu:n, c:d:n, t:4dlu:n, c:d:n"); // rows JXPanel control = new JXPanel(); PanelBuilder builder = new PanelBuilder(control, formLayout); builder.setBorder(Borders.BUTTON_BAR_GAP_BORDER); CellConstraints cl = new CellConstraints(); CellConstraints cc = new CellConstraints(); radioGroupLabel = builder.addLabel("", cl.xywh(1, 1, 1, 1), radioGroup, cc.xywh(3, 1, 3, 1)); inputTextLabel = builder.addLabel("", cl.xywh(1, 3, 1, 1), inputText, cc .xywh(3, 3, 1, 1)); patternLabel = builder.addLabel("", cl.xywh(1, 5, 1, 1), patternText, cc.xywh( 3, 5, 1, 1)); builder.add(nextButton, cc.xywh(5, 3, 1, 1)); return control; } // --------------- super overrides public String getName() { return "Decorators"; } public String getInformationTitle() { return "Highlighters :: Filters"; } public String getHtmlDescription() { return "<html> " + " Demonstrates the use Decorators (Highlighters, Filters)" + " and searching " + " in collection components JXTable, JXList, JXTree. " + " " + "<p> <b>Find matching text </b> - this demo supports three find modes: " + " <ul>" + " <li> highlight all matching occurrences " + " <li> filter away all non-matching rows (JXTable only - match is tested on first " + " column)" + " <li> search and select next occurrence (JXTable only) " + " </ul>" + "<p> <b>Mouse rollover</b> - this demo highlights the foreground in the row below " + " the current mouse position if the find mode is set to highlight. " + " </html>"; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -