📄 mainframe.java
字号:
} setProjectChanged(false); return SaveReturn.SAVE_SUCCESSFUL; } static final String TREECARD = "Tree"; static final String WAITCARD = "Wait"; public void showWaitCard() { showCard(WAITCARD, new Cursor(Cursor.WAIT_CURSOR)); } public void showTreeCard() { showCard(TREECARD, new Cursor(Cursor.DEFAULT_CURSOR)); } private void showCard(final String c, final Cursor cursor) { if (SwingUtilities.isEventDispatchThread()) { setCursor(cursor); CardLayout layout = (CardLayout) cardPanel.getLayout(); layout.show(cardPanel, c); } else SwingUtilities.invokeLater(new Runnable() { public void run() { setCursor(cursor); CardLayout layout = (CardLayout) cardPanel.getLayout(); layout.show(cardPanel, c); } }); } JPanel waitPanel, cardPanel; /** * * @return */ JPanel bugListPanel() { cardPanel = new JPanel(new CardLayout()); JPanel topPanel = new JPanel(); waitPanel = new JPanel(); waitPanel.add(new JLabel("Please wait...")); cardPanel.add(topPanel, TREECARD); cardPanel.add(waitPanel, WAITCARD); topPanel.setMinimumSize(new Dimension(200,200)); tableheader = new JTableHeader(); //Listener put here for when user double clicks on sorting //column header SorterDialog appears. tableheader.addMouseListener(new MouseAdapter(){ @Override public void mouseClicked(MouseEvent e) { Debug.println("tableheader.getReorderingAllowed() = " + tableheader.getReorderingAllowed()); if (!tableheader.getReorderingAllowed()) return; if (e.getClickCount()==2) SorterDialog.getInstance().setVisible(true); } @Override public void mouseReleased(MouseEvent arg0) { if (!tableheader.getReorderingAllowed()) return; BugTreeModel bt=(BugTreeModel) (MainFrame.this.getTree().getModel()); bt.checkSorter(); } }); sorter = GUISaveState.getInstance().getStarterTable(); tableheader.setColumnModel(sorter); tableheader.setToolTipText(edu.umd.cs.findbugs.L10N.getLocalString("tooltip.reorder_message", "Drag to reorder tree folder and sort order")); tree = new JTree(); treeUI = (BasicTreeUI) tree.getUI(); tree.setLargeModel(true); tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); tree.setCellRenderer(new BugRenderer()); tree.setRowHeight((int)(Driver.getFontSize() + 7)); if (false) { System.out.println("Left indent had been " + treeUI.getLeftChildIndent()); System.out.println("Right indent had been " + treeUI.getRightChildIndent()); treeUI.setLeftChildIndent(30 ); treeUI.setRightChildIndent(30 ); } tree.setModel(new BugTreeModel(tree, sorter, new BugSet(new ArrayList<BugLeafNode>()))); setupTreeListeners(); curProject= new Project(); treeScrollPane = new JScrollPane(tree); topPanel.setLayout(new BorderLayout()); //New code to fix problem in Windows JTable t = new JTable(new DefaultTableModel(0, Sortables.values().length)); t.setTableHeader(tableheader); JScrollPane sp = new JScrollPane(t); //This sets the height of the scrollpane so it is dependent on the fontsize. int num = (int) (Driver.getFontSize()*1.2); sp.setPreferredSize(new Dimension(0, 10+num)); //End of new code. //Changed code. topPanel.add(sp, BorderLayout.NORTH); //topPanel.add(tableheader, BorderLayout.NORTH); //End of changed code. topPanel.add(treeScrollPane, BorderLayout.CENTER); return cardPanel; } public void newTree(final JTree newTree, final BugTreeModel newModel) { SwingUtilities.invokeLater(new Runnable() { public void run() { tree = newTree; tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); tree.setLargeModel(true); tree.setCellRenderer(new BugRenderer()); showTreeCard(); Container container = treeScrollPane.getParent(); container.remove(treeScrollPane); treeScrollPane = new JScrollPane(newTree); container.add(treeScrollPane, BorderLayout.CENTER); setFontSizeHelper(container.getComponents(), Driver.getFontSize()); tree.setRowHeight((int)(Driver.getFontSize() + 7)); MainFrame.getInstance().getContentPane().validate(); MainFrame.getInstance().getContentPane().repaint(); setupTreeListeners(); newModel.openPreviouslySelected(((BugTreeModel)(tree.getModel())).getOldSelectedBugs()); MainFrame.this.getSorter().addColumnModelListener(newModel); FilterActivity.addFilterListener(newModel.bugTreeFilterListener); MainFrame.this.setSorting(true); } }); } private void setupTreeListeners() { tree.addTreeSelectionListener(new TreeSelectionListener(){ public void valueChanged(TreeSelectionEvent selectionEvent) { TreePath path = selectionEvent.getNewLeadSelectionPath(); if (path != null) { saveComments(currentSelectedBugLeaf, currentSelectedBugAspects); Object lastPathComponent = path.getLastPathComponent(); if (lastPathComponent instanceof BugLeafNode) { boolean beforeProjectChanged = projectChanged; currentSelectedBugLeaf = (BugLeafNode)lastPathComponent; currentSelectedBugAspects = null; syncBugInformation(); setProjectChanged(beforeProjectChanged); } else { boolean beforeProjectChanged = projectChanged; updateDesignationDisplay(); currentSelectedBugLeaf = null; currentSelectedBugAspects = (BugAspects)lastPathComponent; syncBugInformation(); setProjectChanged(beforeProjectChanged); } }// Debug.println("Tree selection count:" + tree.getSelectionCount()); if (tree.getSelectionCount() !=1) { Debug.println("Tree selection count not equal to 1, disabling comments tab" + selectionEvent); MainFrame.this.setUserCommentInputEnable(false); } } }); tree.addMouseListener(new MouseListener(){ public void mouseClicked(MouseEvent e) { TreePath path = tree.getPathForLocation(e.getX(), e.getY()); if(path == null) return; if ((e.getButton() == MouseEvent.BUTTON3) || (e.getButton() == MouseEvent.BUTTON1 && e.isControlDown())){ if (tree.getModel().isLeaf(path.getLastPathComponent())){ tree.setSelectionPath(path); bugPopupMenu.show(tree, e.getX(), e.getY()); } else{ tree.setSelectionPath(path); if (!(path.getParentPath()==null))//If the path's parent path is null, the root was selected, dont allow them to filter out the root. branchPopupMenu.show(tree, e.getX(), e.getY()); } } } public void mousePressed(MouseEvent arg0) {} public void mouseReleased(MouseEvent arg0) {} public void mouseEntered(MouseEvent arg0) {} public void mouseExited(MouseEvent arg0) {} }); } void syncBugInformation (){ boolean prevProjectChanged = projectChanged; if (currentSelectedBugLeaf != null) { BugInstance bug = currentSelectedBugLeaf.getBug(); displayer.displaySource(bug, bug.getPrimarySourceLineAnnotation()); comments.updateCommentsFromLeafInformation(currentSelectedBugLeaf); updateDesignationDisplay(); comments.updateCommentsFromLeafInformation(currentSelectedBugLeaf); updateSummaryTab(currentSelectedBugLeaf); } else if (currentSelectedBugAspects != null) { updateDesignationDisplay(); comments.updateCommentsFromNonLeafInformation(currentSelectedBugAspects); displayer.displaySource(null, null); clearSummaryTab(); } else { displayer.displaySource(null, null); clearSummaryTab(); } setProjectChanged(prevProjectChanged); } /** * Clears the source code text pane. * */ void clearSourcePane(){ SwingUtilities.invokeLater(new Runnable(){ public void run(){ setSourceTabTitle("Source"); sourceCodeTextPane.setDocument(SourceCodeDisplay.SOURCE_NOT_RELEVANT); } }); } /** * @param b */ private void setUserCommentInputEnable(boolean b) { comments.setUserCommentInputEnable(b); } /** * Creates the status bar of the GUI. * @return */ JPanel statusBar() { JPanel statusBar = new JPanel(); // statusBar.setBackground(Color.WHITE); statusBar.setBorder(new BevelBorder(BevelBorder.LOWERED)); statusBar.setLayout(new BorderLayout()); statusBar.add(statusBarLabel,BorderLayout.WEST); JLabel logoLabel = new JLabel(); ImageIcon logoIcon = new ImageIcon(MainFrame.class.getResource("logo_umd.png")); logoLabel.setIcon(logoIcon); statusBar.add(logoLabel, BorderLayout.EAST); return statusBar; } void updateStatusBar() { int countFilteredBugs = BugSet.countFilteredBugs(); if (countFilteredBugs == 0) statusBarLabel.setText(" http://findbugs.sourceforge.net/"); else if (countFilteredBugs == 1) statusBarLabel.setText(" 1 " + edu.umd.cs.findbugs.L10N.getLocalString("statusbar.bug_hidden", "bug hidden")); else statusBarLabel.setText(" " + countFilteredBugs + " " + edu.umd.cs.findbugs.L10N.getLocalString("statusbar.bugs_hidden", "bugs hidden")); } private void updateSummaryTab(BugLeafNode node) { final BugInstance bug = node.getBug(); final ArrayList<BugAnnotation> primaryAnnotations = new ArrayList<BugAnnotation>(); boolean classIncluded = false; //This ensures the order of the primary annotations of the bug if(bug.getPrimarySourceLineAnnotation() != null) primaryAnnotations.add(bug.getPrimarySourceLineAnnotation()); if(bug.getPrimaryMethod() != null) primaryAnnotations.add(bug.getPrimaryMethod()); if(bug.getPrimaryField() != null) primaryAnnotations.add(bug.getPrimaryField()); /* * This makes the primary class annotation appear only when * the visible field and method primary annotations don't have * the same class. */ if(bug.getPrimaryClass() != null){ FieldAnnotation primeField = bug.getPrimaryField(); MethodAnnotation primeMethod = bug.getPrimaryMethod(); ClassAnnotation primeClass = bug.getPrimaryClass(); String fieldClass = ""; String methodClass = ""; if(primeField != null) fieldClass = primeField.getClassName(); if(primeMethod != null) methodClass = primeMethod.getClassName(); if((primaryAnnotations.size() < 2) || (!(primeClass.getClassName().equals(fieldClass) || primeClass.getClassName().equals(methodClass)))){ primaryAnnotations.add(primeClass); classIncluded = true; } } final boolean classIncluded2 = classIncluded; SwingUtilities.invokeLater(new Runnable(){ public void run(){ summaryTopPanel.removeAll(); summaryTopPanel.add(bugSummaryComponent(bug.getMessageWithoutPrefix(), bug)); for(BugAnnotation b : primaryAnnotations) summaryTopPanel.add(bugSummaryComponent(b, bug)); if(!classIncluded2 && bug.getPrimaryClass() != null) primaryAnnotations.add(bug.getPrimaryClass()); for(Iterator<BugAnnotation> i = bug.annotationIterator(); i.hasNext();){ BugAnnotation b = i.next(); boolean cont = true; for(BugAnnotation p : primaryAnnotations) if(p == b) cont = false; if(cont) summaryTopPanel.add(bugSummaryComponent(b, bug)); } summaryHtmlArea.setText(bug.getBugPattern().getDetailHTML()); summaryTopPanel.add(Box.createVerticalGlue()); summaryTopPanel.revalidate(); SwingUtilities.invokeLater(new Runnable(){ public void run(){ summaryHtmlScrollPane.getVerticalScrollBar().setValue(summaryHtmlScrollPane.getVerticalScrollBar().getMinimum()); } }); } }); } private void clearSummaryTab() { summaryHtmlArea.setText(""); summaryTopPanel.removeAll(); summaryTopPanel.revalidate(); } /** * Creates initial summary tab and sets everything up. * @return */ JSplitPane summaryTab() { int fontSize = (int) Driver.getFontSize(); summaryTopPanel = new JPanel(); summaryTopPanel.setLayout(new GridLayout(0,1)); summaryTopPanel.setBorder(BorderFactory.createEmptyBorder(2,4,2,4)); summaryTopPanel.setMinimumSize(new Dimension(fontSize * 50, fontSize*5)); JPanel summaryTopOuter = new JPanel(new BorderLayout()); summaryTopOuter.add(summaryTopPanel, BorderLayout.NORTH); summaryHtmlArea.setToolTipText(edu.umd.cs.findbugs.L10N.getLocalString("tooltip.longer_description", "This gives a longer description of the detected bug pattern")); summaryHtmlArea.setContentType("text/html"); summaryHtmlArea.setEditable(false); summaryHtmlArea.addHyperlinkListener(new javax.swing.event.HyperlinkListener() { public void hyperlinkUpdate(javax.swing.event.HyperlinkEvent evt) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -