userwindowlistener.java
字号:
g.setColor(UserWindowListener.selectedBorderColor);
switch (UserWindowListener.getEditType()) {
case UserWindowListener.SELECT: //a component has been selected - draw the border
if ((UserWindowListener.getInstance().getSelectedComponent() != null) && (window == UserWindowListener.getInstance().getCurrentWindow())) {
Dimension size = UserWindowListener.getInstance().getSelectedComponent().getSize();
Point location = getPaneLocation(UserWindowListener.getInstance().getSelectedComponent());
int x = location.x, y = location.y;
int width = size.width, height = size.height;
for (int pos=1; pos<=UserWindowListener.selectedBorderWidth; pos++)
g.drawRect(x-pos, y-pos, width+2*pos, height+2*pos);
}
break;
case UserWindowListener.ADD_COMPONENT: //a bounding box should be drawn
case UserWindowListener.RESIZE_COMPONENT:
case UserWindowListener.MOVE_COMPONENT:
drawRect(g, startx, starty, endx-startx, endy-starty);
break;
}
}
//When the window is resized, the currently selected component might get resized
//(due to the AlignmentLayout) so we need to make sure the bounding box is updated.
private boolean validating = false;
public void setBounds(int x, int y, int width, int height) {
super.setBounds(x, y, width, height);
if ((UserWindowListener.getInstance().getCurrentWindow() == window) && !validating) {
//the call to validate below calls this method - we'll get into an
//infinite loop if we don't record the fact we're already here
validating = true;
UserWindowListener.getInstance().getCurrentWindow().validate();
if (UserWindowListener.getInstance().getCurrentWindow().isVisible()) //make sure window visible
UserWindowListener.getInstance().validateBoundingBox();
validating = false;
}
}
//---------------- MouseInput methods ------------------
public void mouseMoved(MouseEvent e) {
if ((window == UserWindowListener.getInstance().getCurrentWindow()) && (UserWindowListener.getInstance().getSelectedComponent() != null)) {
if (UserWindowListener.getEditType() == UserWindowListener.SELECT) {
Rectangle[] selectedRegion = UserWindowListener.getInstance().getSelectedRegion();
if (selectedRegion[0].contains(e.getPoint())) {
if (inside != CENTRE) setCursor(new Cursor(Cursor.MOVE_CURSOR));
inside = CENTRE;
} else if (selectedRegion[1].contains(e.getPoint())) {
if (inside != TOP_LEFT) setCursor(new Cursor(Cursor.NW_RESIZE_CURSOR));
inside = TOP_LEFT;
} else if (selectedRegion[2].contains(e.getPoint())) {
if (inside != TOP_RIGHT) setCursor(new Cursor(Cursor.NE_RESIZE_CURSOR));
inside = TOP_RIGHT;
} else if (selectedRegion[3].contains(e.getPoint())) {
if (inside != BOTTOM_LEFT) setCursor(new Cursor(Cursor.SW_RESIZE_CURSOR));
inside = BOTTOM_LEFT;
} else if (selectedRegion[4].contains(e.getPoint())) {
if (inside != BOTTOM_RIGHT) setCursor(new Cursor(Cursor.SE_RESIZE_CURSOR));
inside = BOTTOM_RIGHT;
} else if (selectedRegion[5].contains(e.getPoint())) {
if (inside != TOP_BORDER) setCursor(new Cursor(Cursor.N_RESIZE_CURSOR));
inside = TOP_BORDER;
} else if (selectedRegion[6].contains(e.getPoint())) {
if (inside != BOTTOM_BORDER) setCursor(new Cursor(Cursor.S_RESIZE_CURSOR));
inside = BOTTOM_BORDER;
} else if (selectedRegion[7].contains(e.getPoint())) {
if (inside != LEFT_BORDER) setCursor(new Cursor(Cursor.W_RESIZE_CURSOR));
inside = LEFT_BORDER;
} else if (selectedRegion[8].contains(e.getPoint())) {
if (inside != RIGHT_BORDER) setCursor(new Cursor(Cursor.E_RESIZE_CURSOR));
inside = RIGHT_BORDER;
} else {
if (inside != NONE) setCursor(Cursor.getDefaultCursor());
inside = NONE;
}
}
}
}
public void mouseDragged(MouseEvent e) {
switch (UserWindowListener.getEditType()) {
case UserWindowListener.ADD_COMPONENT:
case UserWindowListener.RESIZE_COMPONENT:
switch (getCursor().getType()) {
case Cursor.DEFAULT_CURSOR:
case Cursor.NW_RESIZE_CURSOR:
case Cursor.NE_RESIZE_CURSOR:
case Cursor.SW_RESIZE_CURSOR:
case Cursor.SE_RESIZE_CURSOR:
endx = e.getX();
endy = e.getY();
break;
case Cursor.N_RESIZE_CURSOR:
starty = e.getY();
break;
case Cursor.S_RESIZE_CURSOR:
endy = e.getY();
break;
case Cursor.W_RESIZE_CURSOR:
startx = e.getX();
break;
case Cursor.E_RESIZE_CURSOR:
endx = e.getX();
break;
}
break;
case UserWindowListener.MOVE_COMPONENT:
startx = e.getX() - diffx;
starty = e.getY() - diffy;
endx = startx + UserWindowListener.getInstance().getSelectedComponent().getWidth();
endy = starty + UserWindowListener.getInstance().getSelectedComponent().getHeight();
break;
}
repaint();
}
public void mouseClicked(MouseEvent e) {
Container clickedIn = ((Component)e.getSource()).getParent().getParent();
if (clickedIn instanceof UserWindow) clickedIn = ((UserWindow)clickedIn).getContentPane();
int x = e.getX(), y = e.getY();
if (UserWindowListener.getEditType() == UserWindowListener.ADD_COMPONENT) {
Component clickPlace = SwingUtilities.getDeepestComponentAt(clickedIn, startx, starty);
while (!(clickPlace instanceof UserContainer)) { clickPlace = clickPlace.getParent(); }
JComponent component = PIY.getInstance().addComponent((UserContainer)clickPlace, null, x, y, 100, 32); //add the component to this window
UserWindowListener.setEditType(UserWindowListener.SELECT);
UserWindowListener.getInstance().selectComponent(component);
} else if (UserWindowListener.getEditType() == UserWindowListener.SELECT) {
Component selected = SwingUtilities.getDeepestComponentAt(clickedIn, x, y);
if (selected == clickedIn) { //selected the window
selected = null;
UserWindowListener.getInstance().setCurrentWindow((JFrame)((Component)e.getSource()).getParent().getParent());
} else if (!(selected instanceof UserComponent)) {
//this can occur in compound user components - the user selects a "part" of the component
//but the actual user component just contains that part (as in a text pane)
while (!(selected instanceof UserComponent)) selected = selected.getParent();
}
UserWindowListener.getInstance().selectComponent(selected);
}
}
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mousePressed(MouseEvent e) {
clickedIn = ((Component)e.getSource()).getParent().getParent();
if (clickedIn instanceof UserWindow) clickedIn = ((UserWindow)clickedIn).getContentPane();
switch (UserWindowListener.getEditType()) {
case UserWindowListener.SELECT:
if (UserWindowListener.getInstance().getSelectedComponent() != null) {
Point pos = getPaneLocation(UserWindowListener.getInstance().getSelectedComponent());
if (getCursor().getType() != Cursor.getDefaultCursor().getType()) UserWindowListener.setEditType(UserWindowListener.RESIZE_COMPONENT);
switch (getCursor().getType()) {
case Cursor.NW_RESIZE_CURSOR:
startx = pos.x + UserWindowListener.getInstance().getSelectedComponent().getWidth();
starty = pos.y + UserWindowListener.getInstance().getSelectedComponent().getHeight();
break;
case Cursor.NE_RESIZE_CURSOR:
startx = pos.x;
starty = pos.y + UserWindowListener.getInstance().getSelectedComponent().getHeight();
break;
case Cursor.SW_RESIZE_CURSOR:
startx = pos.x + UserWindowListener.getInstance().getSelectedComponent().getWidth();
starty = pos.y;
break;
case Cursor.SE_RESIZE_CURSOR:
startx = pos.x;
starty = pos.y;
break;
case Cursor.N_RESIZE_CURSOR:
case Cursor.S_RESIZE_CURSOR:
case Cursor.E_RESIZE_CURSOR:
case Cursor.W_RESIZE_CURSOR:
startx = pos.x;
starty = pos.y;
endx = pos.x + UserWindowListener.getInstance().getSelectedComponent().getWidth();
endy = pos.y + UserWindowListener.getInstance().getSelectedComponent().getHeight();
break;
case Cursor.MOVE_CURSOR:
startx = pos.x;
starty = pos.y;
endx = pos.x + UserWindowListener.getInstance().getSelectedComponent().getWidth();
endy = pos.y + UserWindowListener.getInstance().getSelectedComponent().getHeight();
diffx = e.getX() - startx;
diffy = e.getY() - starty;
UserWindowListener.setEditType(UserWindowListener.MOVE_COMPONENT);
break;
}
}
break;
case UserWindowListener.ADD_COMPONENT:
startx = e.getX();
starty = e.getY();
break;
}
}
public void mouseReleased(MouseEvent e) {
//get the point relative to its parent container
if (UserWindowListener.getInstance().getSelectedComponent() != null) clickedIn = UserWindowListener.getInstance().getSelectedComponent().getParent();
Point start = getPointLocation(clickedIn, new Point(startx, starty));
//sort out coordinates/size
int width = endx - startx;
int height = endy - starty;
if (width < 0) {
width = -width;
start.x -= width;
}
if (height < 0) {
height = -height;
start.y -= height;
}
switch (UserWindowListener.getEditType()) {
case UserWindowListener.ADD_COMPONENT:
Component clickPlace = SwingUtilities.getDeepestComponentAt(clickedIn, startx, starty);
while (!(clickPlace instanceof UserContainer)) {
clickPlace = clickPlace.getParent();
}
start = getPointLocation((Container)clickPlace, start);
//add component at specified point to the specified container
JComponent component = PIY.getInstance().addComponent((UserContainer)clickPlace, null, start.x, start.y, width, height); //add the component to this window
//return to the select mode (the selectComponent method informs PIY of this).
UserWindowListener.getInstance().selectComponent(component);
break;
case UserWindowListener.RESIZE_COMPONENT:
case UserWindowListener.MOVE_COMPONENT:
UserWindowListener.getInstance().getSelectedComponent().setBounds(start.x, start.y, width, height);
setCursor(Cursor.getDefaultCursor());
inside = -1;
if (UserWindowListener.getInstance().getCurrentWindow() != null) UserWindowListener.getInstance().getCurrentWindow().validate();
UserWindowListener.getInstance().selectComponent(UserWindowListener.getInstance().getSelectedComponent());
repaint();
break;
}
//reset coords
startx = 0; starty = 0; endx = 0; endy=0;
UserWindowListener.setEditType(UserWindowListener.SELECT);
//notify the project handler that we've made a change
ProjectHandler.getInstance().projectChanged();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -