📄 stateframe.java
字号:
package TreeJuxtaposer;import java.util.Iterator;import javax.swing.JCheckBox;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JRadioButton;import javax.swing.JButton;import javax.swing.ButtonGroup;import javax.swing.JLabel;import javax.swing.JColorChooser;import java.awt.GraphicsConfiguration;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.Color;import java.awt.Canvas;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.awt.event.MouseListener;import java.awt.event.MouseEvent;/** * @author jslack * * To change this generated comment edit the template variable "typecomment": * Window>Preferences>Java>Templates. * To enable and disable the creation of type comments go to * Window>Preferences>Java>Code Generation. */public class StateFrame extends JFrame implements ActionListener, MouseListener { private final static String title = "Groups"; private JPanel blank; // for spacing, if needed private TreeJuxtaposer tj; private static final int CANVAS_SIZE = 15; /* Active Panel * Includes the following panels: * grow direction * grow action * active group */ private JPanel activePanel; private final static JLabel activePanelLabel = new JLabel("Active"); private JButton resetButton; /* grow direction panel */ private JPanel growDirectionPanel; private ButtonGroup growSelect; private JRadioButton growMode[]; private final static JLabel growDirLabel = new JLabel("Direction"); private final static String growLabel[] = {"Horizontal", "Vertical", "Both"}; private final static int H_MODE = 0; private final static int V_MODE = 1; private final static int B_MODE = 2; /* grow action panel */ private JPanel growButtonPanel; private JButton growButton[]; private final static JLabel growButtonLabel = new JLabel("Grow"); private final static String buttonLabel[] = {"Bigger", "Smaller"}; private final static int B_GROW = 0; private final static int S_GROW = 1; /* active group panel */ private JPanel activeGroupPanel; private Canvas activeCanvas[]; private ButtonGroup activeSelect; private JRadioButton activeMode[]; public final static String activeLabel[] = {"Group A", "Group B", "Group C", "Group D", "Mouse Over", "Differences", "Found", "LCA"}; static final private String colorTitle[] = { "'Group A' color selection", "'Group B' color selection", "'Group C' color selection", "'Group D' color selection", "'Mouse Over' color selection", "'Tree Differences' color selection", "'Found Nodes' color selection", " 'LCA' color selection" }; public final static int GA_ACT = 0; public final static int GB_ACT = 1; public final static int GC_ACT = 2; public final static int GD_ACT = 3; public final static int M_ACT = 4; public final static int D_ACT = 5; public final static int F_ACT = 6; public final static int LCA_ACT = 7; /* Mark panel */ private JPanel markPanel; private final static JLabel markPanelLabel = new JLabel("Mark"); /* Mark radio buttons */ private ButtonGroup markSelect; private JRadioButton markMode[]; private JPanel markModePanel; private final static String markLabel[] = {activeLabel[0], activeLabel[1], activeLabel[2], activeLabel[3]}; private Canvas markCanvas[]; private final static String clearLabel[] = {"Clear group", "Clear all"}; private final static int G_CLEAR = 0; private final static int A_CLEAR = 1; private JButton clearButton[]; /* mark resolution (node or subtree marking) */ private final static JLabel resolutionTitle = new JLabel("Mark Resolution"); private JPanel resolutionPanel; private ButtonGroup markResolution; private final static String resolutionLabel[] = {"Node", "Subtree"}; private final static int N_RES = 0; private final static int S_RES = 1; private JRadioButton resolutionMode[]; private ButtonGroup actionSelect; /* Least common ancestor checkboxes */ private final static String LCA = "LCA"; private JCheckBox LCAGroup; // for growing by LCA when checked public JCheckBox LCAMark; // for marking by LCA (follow marks to LCA) when checked private final static Color initialColor[] = { Color.getHSBColor(250f/360f, 1f, 1f), // group A Color.getHSBColor(140f/360f, 1f, 1f), // group B Color.getHSBColor(180f/360f, 1f, 1f), // group C Color.getHSBColor(280f/360f, 1f, 1f), // group D Color.getHSBColor(36f/360f, 1f, 1f), // mouse over Color.getHSBColor(0f/360f, 1f, 1f), // differences //new Color(87, 152, 64), // dark green Color.getHSBColor(310f/360f, 1f, 1f), // found new Color(87, 152, 64) // lca }; private Color color[]; /** * Constructor for StateFrame. * @throws HeadlessException */ public StateFrame(TreeJuxtaposer tj) { super(); this.tj = tj; this.setResizable(false); initComponents(); } /** * Constructor for StateFrame. * @param gc */ public StateFrame(TreeJuxtaposer tj, GraphicsConfiguration gc) { super(gc); this.tj = tj; this.setResizable(false); initComponents(); } /** * Constructor for StateFrame. * @param title * @throws HeadlessException */ public StateFrame(TreeJuxtaposer tj, String title) { super(title); this.tj = tj; this.setResizable(false); initComponents(); } /** * Constructor for StateFrame. * @param title * @param gc */ public StateFrame(TreeJuxtaposer tj, String title, GraphicsConfiguration gc) { super(title, gc); this.tj = tj; this.setResizable(false); initComponents(); } private void initComponents() { GridBagConstraints gbc = new GridBagConstraints(); this.setTitle(title); ((JFrame)this).setLocation(10,30); this.getContentPane().setLayout(new GridBagLayout()); /* Active Panel */ activePanel = new JPanel(new GridBagLayout()); activePanel.setBorder(javax.swing.BorderFactory.createLineBorder(Color.black)); gbc.ipadx = 0; gbc.ipady = 0; gbc.gridx = 0; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.gridy = 0; //activePanel.add(activePanelLabel, gbc); /* Grow direction panel */ growDirectionPanel = new JPanel(new GridBagLayout()); //growDirectionPanel.setBorder(javax.swing.BorderFactory.createLineBorder(Color.black)); gbc.gridx = 0; gbc.gridy = 0; gbc.gridwidth = 1; //gbc.gridwidth = growLabel.length; //growDirectionPanel.add(growDirLabel, gbc); growButton = new JButton[buttonLabel.length]; for (int i = 0; i < buttonLabel.length; i++) { growButton[i] = new JButton(buttonLabel[i]); gbc.gridx = i; growDirectionPanel.add(growButton[i], gbc); } growMode = new JRadioButton[growLabel.length]; growSelect = new ButtonGroup(); gbc.gridy = 0; for (int i = 0; i < growLabel.length; i++) { growMode[i] = new JRadioButton(growLabel[i]); growSelect.add(growMode[i]); gbc.gridx = i + buttonLabel.length; growDirectionPanel.add(growMode[i], gbc); } LCAGroup = new JCheckBox(LCA, false); gbc.gridx = buttonLabel.length + 2*growLabel.length; gbc.anchor = GridBagConstraints.EAST;// growDirectionPanel.add(LCAGroup, gbc); gbc.anchor = GridBagConstraints.CENTER; resetButton = new JButton("Reset"); gbc.gridx++; gbc.anchor = GridBagConstraints.WEST; growDirectionPanel.add(resetButton, gbc); gbc.anchor = GridBagConstraints.CENTER; gbc.gridx = 1; gbc.gridy = 1; gbc.fill = GridBagConstraints.BOTH; activePanel.add(growDirectionPanel, gbc); gbc.fill = GridBagConstraints.NONE; /* Grow button panel */ /* growButtonPanel = new JPanel(new GridBagLayout()); growButtonPanel.setBorder(javax.swing.BorderFactory.createLineBorder(Color.black)); gbc.gridx = 0; gbc.gridy = 0; growButtonPanel.add(growButtonLabel); */ /* Active Group Panel */ activeGroupPanel = new JPanel(new GridBagLayout()); //activeGroupPanel.setBorder(javax.swing.BorderFactory.createLineBorder(Color.black)); activeCanvas = new Canvas[activeLabel.length]; activeMode = new JRadioButton[activeLabel.length]; activeSelect = new ButtonGroup(); color = new Color[activeLabel.length]; gbc.gridy = 0; for (int i = 0; i < activeLabel.length; i++) { color[i] = new Color(initialColor[i].getRGB()); if (i >= activeLabel.length / 2) { gbc.gridy = 1; gbc.gridx = 3 * (i - activeLabel.length/2 ); } else gbc.gridx = 3 * i; // put in radio buttons activeMode[i] = new JRadioButton(activeLabel[i]); activeSelect.add(activeMode[i]); gbc.ipadx = 0; gbc.anchor = GridBagConstraints.WEST; gbc.gridx += 1; activeGroupPanel.add(activeMode[i], gbc); activeCanvas[i] = new Canvas(); activeCanvas[i].setBackground(color[i]); activeCanvas[i].setSize(CANVAS_SIZE, CANVAS_SIZE); gbc.gridx -= 1; gbc.anchor = GridBagConstraints.EAST; JPanel canvasPanel = new JPanel(); canvasPanel.add(activeCanvas[i]); canvasPanel.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED)); activeGroupPanel.add(canvasPanel, gbc); //activeGroupPanel.add(activeCanvas[i], gbc); gbc.ipadx = 10; gbc.gridx += 2; blank = new JPanel(); activeGroupPanel.add(blank, gbc); } gbc.anchor = GridBagConstraints.CENTER; gbc.ipadx = 0; activeMode[M_ACT].setSelected(true); gbc.gridy = 0; gbc.gridx = 1; gbc.fill = GridBagConstraints.BOTH; activePanel.add(activeGroupPanel, gbc); gbc.fill = GridBagConstraints.NONE; /* Active Panel events */ resetButton.addActionListener(this); growMode[H_MODE].addActionListener(this); growMode[V_MODE].addActionListener(this); growMode[B_MODE].addActionListener(this); growButton[B_GROW].addActionListener(this); growButton[S_GROW].addActionListener(this); activeMode[GA_ACT].addActionListener(this); activeMode[GB_ACT].addActionListener(this); activeMode[GC_ACT].addActionListener(this); activeMode[GD_ACT].addActionListener(this); activeMode[M_ACT].addActionListener(this); activeMode[D_ACT].addActionListener(this); activeMode[F_ACT].addActionListener(this); activeMode[LCA_ACT].addActionListener(this); activeCanvas[GA_ACT].addMouseListener(this); activeCanvas[GB_ACT].addMouseListener(this); activeCanvas[GC_ACT].addMouseListener(this); activeCanvas[GD_ACT].addMouseListener(this); activeCanvas[M_ACT].addMouseListener(this); activeCanvas[D_ACT].addMouseListener(this); activeCanvas[F_ACT].addMouseListener(this); activeCanvas[LCA_ACT].addMouseListener(this); LCAGroup.addActionListener(this); /* Mark Panel */ markPanel = new JPanel(new GridBagLayout()); markPanel.setBorder(javax.swing.BorderFactory.createLineBorder(Color.black)); gbc.ipadx = 0; gbc.ipady = 0; gbc.gridx = 0; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.gridy = 0; gbc.anchor = GridBagConstraints.WEST; markPanel.add(markPanelLabel, gbc); gbc.anchor = GridBagConstraints.CENTER; markModePanel = new JPanel(); //markModePanel.setBorder(javax.swing.BorderFactory.createLineBorder(Color.black)); markSelect = new ButtonGroup(); gbc.gridy = 1; markMode = new JRadioButton[markLabel.length]; markCanvas = new Canvas[markLabel.length]; for (int i = 0; i < markLabel.length; i++) { markMode[i] = new JRadioButton(markLabel[i]); markCanvas[i] = new Canvas(); markCanvas[i].setBackground(color[i]); markCanvas[i].setSize(CANVAS_SIZE, CANVAS_SIZE); markSelect.add(markMode[i]); gbc.gridx = i * 3; gbc.ipadx = 0; gbc.anchor = GridBagConstraints.EAST; JPanel canvasPanel = new JPanel(); canvasPanel.add(markCanvas[i]); canvasPanel.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED)); markModePanel.add(canvasPanel, gbc); //markModePanel.add(markCanvas[i], gbc); gbc.gridx += 1; gbc.anchor = GridBagConstraints.WEST; markModePanel.add(markMode[i], gbc); gbc.anchor = GridBagConstraints.CENTER; gbc.gridx += 1; gbc.ipadx = 10; markModePanel.add(new JPanel(), gbc); } gbc.gridx = 0; gbc.gridy = 1; gbc.gridwidth = 10; gbc.fill = GridBagConstraints.BOTH; markPanel.add(markModePanel, gbc); gbc.fill = GridBagConstraints.NONE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -