forked from fanruan/design
plough
7 years ago
2 changed files with 539 additions and 7 deletions
@ -0,0 +1,299 @@ |
|||||||
|
package com.fr.design.gui.icontainer; |
||||||
|
|
||||||
|
import com.fr.base.BaseUtils; |
||||||
|
import com.fr.design.constants.UIConstants; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.mainframe.DesignerContext; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
import com.fr.stable.Constants; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.MouseAdapter; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
import java.awt.event.MouseMotionListener; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by plough on 2017/7/7. |
||||||
|
*/ |
||||||
|
public class UIEastResizableContainer extends JPanel { |
||||||
|
private static final long serialVersionUID = 1854340560790476907L; |
||||||
|
private int containerWidth = 240; |
||||||
|
private int preferredWidth = 240; |
||||||
|
private int topToolPaneHeight = 20; |
||||||
|
private int leftPaneWidth = 40; |
||||||
|
|
||||||
|
private JComponent leftPane; |
||||||
|
private JComponent rightPane; |
||||||
|
|
||||||
|
// private HorizotalToolPane horizontToolPane;
|
||||||
|
private TopToolPane topToolPane; |
||||||
|
|
||||||
|
|
||||||
|
private static final int ARROW_MARGIN = 15; |
||||||
|
private static final int ARROW_RANGE = 35; |
||||||
|
|
||||||
|
private boolean isRightPaneVisible = true; |
||||||
|
|
||||||
|
public UIEastResizableContainer() { |
||||||
|
this(new JPanel(), new JPanel()); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置面板宽度 |
||||||
|
* |
||||||
|
* @param width |
||||||
|
*/ |
||||||
|
public void setContainerWidth(int width) { |
||||||
|
this.containerWidth = width; |
||||||
|
this.preferredWidth = width; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void setRightPaneVisible(boolean isVisible){ |
||||||
|
this.isRightPaneVisible = isVisible; |
||||||
|
} |
||||||
|
|
||||||
|
private void setPreferredWidth(int width) { |
||||||
|
this.preferredWidth = width; |
||||||
|
} |
||||||
|
|
||||||
|
public UIEastResizableContainer(JComponent leftPane, JComponent rightPane) { |
||||||
|
setBackground(UIConstants.NORMAL_BACKGROUND); |
||||||
|
this.leftPane = leftPane; |
||||||
|
this.rightPane = rightPane; |
||||||
|
|
||||||
|
this.topToolPane = new TopToolPane(); |
||||||
|
|
||||||
|
setLayout(containerLayout); |
||||||
|
add(topToolPane); |
||||||
|
add(leftPane); |
||||||
|
add(rightPane); |
||||||
|
} |
||||||
|
|
||||||
|
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()); |
||||||
|
|
||||||
|
JPanel leftPane = new JPanel(); |
||||||
|
leftPane.setBackground(Color.yellow); |
||||||
|
JPanel rightPane = new JPanel(); |
||||||
|
rightPane.setBackground(Color.green); |
||||||
|
|
||||||
|
UIButton b1, b2; |
||||||
|
b1 = new UIButton("b1"); |
||||||
|
b2 = new UIButton("b2"); |
||||||
|
b1.setPreferredSize(new Dimension(40, 40)); |
||||||
|
b2.setPreferredSize(new Dimension(40, 40)); |
||||||
|
leftPane.add(b1); |
||||||
|
leftPane.add(b2); |
||||||
|
|
||||||
|
|
||||||
|
UIEastResizableContainer bb = new UIEastResizableContainer(leftPane, rightPane); |
||||||
|
|
||||||
|
JPanel cc = new JPanel(); |
||||||
|
cc.setBackground(Color.white); |
||||||
|
|
||||||
|
content.add(bb, BorderLayout.EAST); |
||||||
|
content.add(cc, BorderLayout.CENTER); |
||||||
|
GUICoreUtils.centerWindow(jf); |
||||||
|
jf.setSize(500, 500); |
||||||
|
jf.setVisible(true); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 将面板设置成最佳的宽度 |
||||||
|
*/ |
||||||
|
public void setWindow2PreferWidth() { |
||||||
|
if (containerWidth == leftPaneWidth) { |
||||||
|
containerWidth = preferredWidth; |
||||||
|
refreshContainer(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 得到容器的宽度 |
||||||
|
* |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public int getContainerWidth() { |
||||||
|
return this.containerWidth; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置关闭设计器前最后一次面板的宽度 |
||||||
|
* |
||||||
|
* @param containerWidth |
||||||
|
*/ |
||||||
|
public void setLastContainerWidth(int containerWidth) { |
||||||
|
this.containerWidth = containerWidth; |
||||||
|
} |
||||||
|
|
||||||
|
private LayoutManager containerLayout = new LayoutManager() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void removeLayoutComponent(Component comp) { |
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Dimension preferredLayoutSize(Container parent) { |
||||||
|
return parent.getPreferredSize(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Dimension minimumLayoutSize(Container parent) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void layoutContainer(Container parent) { |
||||||
|
if (topToolPane == null || rightPane == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
topToolPane.setBounds(0, 0, containerWidth, topToolPaneHeight);//0,0,10,462
|
||||||
|
leftPane.setBounds(0, topToolPaneHeight, leftPaneWidth, getHeight() - topToolPaneHeight); |
||||||
|
|
||||||
|
// parameterPane.setBounds(20, 0, 230, getParameterPaneHeight());//10,0,230,462
|
||||||
|
rightPane.setBounds(leftPaneWidth, topToolPaneHeight, containerWidth-leftPaneWidth, getHeight() - topToolPaneHeight);//20,0,230,0
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void addLayoutComponent(String name, Component comp) { |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
@Override |
||||||
|
/** |
||||||
|
* 得到最佳大小 |
||||||
|
*/ |
||||||
|
public Dimension getPreferredSize() { |
||||||
|
return new Dimension(containerWidth, 400); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 替换左子面板 |
||||||
|
* |
||||||
|
* @param pane 面板 |
||||||
|
*/ |
||||||
|
public void replaceLeftPane(JComponent pane) { |
||||||
|
remove(pane); |
||||||
|
remove(this.leftPane); |
||||||
|
add(this.leftPane = pane); |
||||||
|
refreshContainer(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 替换右子面板 |
||||||
|
* |
||||||
|
* @param pane 面板 |
||||||
|
*/ |
||||||
|
public void replaceRightPane(JComponent pane) { |
||||||
|
remove(pane); |
||||||
|
remove(this.rightPane); |
||||||
|
add(this.rightPane = pane); |
||||||
|
refreshContainer(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 得到左子面板 |
||||||
|
* |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public JComponent getLeftPane() { |
||||||
|
return this.leftPane; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 得到右子面板 |
||||||
|
* |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public JComponent getRightPane() { |
||||||
|
return this.rightPane; |
||||||
|
} |
||||||
|
|
||||||
|
private void refreshContainer() { |
||||||
|
validate(); |
||||||
|
repaint(); |
||||||
|
revalidate(); |
||||||
|
} |
||||||
|
|
||||||
|
private class TopToolPane extends JPanel { |
||||||
|
private int model = UIConstants.MODEL_NORMAL; |
||||||
|
|
||||||
|
public TopToolPane() { |
||||||
|
super(); |
||||||
|
addMouseMotionListener(new MouseMotionListener() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseMoved(MouseEvent e) { |
||||||
|
if (e.getX() <= ARROW_RANGE) { |
||||||
|
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); |
||||||
|
model = UIConstants.MODEL_PRESS; |
||||||
|
} else { |
||||||
|
setCursor(Cursor.getDefaultCursor()); |
||||||
|
model = UIConstants.MODEL_NORMAL; |
||||||
|
} |
||||||
|
repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseDragged(MouseEvent e) { |
||||||
|
} |
||||||
|
}); |
||||||
|
addMouseListener(new MouseAdapter() { |
||||||
|
@Override |
||||||
|
public void mouseExited(MouseEvent e) { |
||||||
|
setCursor(Cursor.getDefaultCursor()); |
||||||
|
model = UIConstants.MODEL_NORMAL; |
||||||
|
repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseClicked(MouseEvent e) { |
||||||
|
if (e.getX() <= ARROW_RANGE) { |
||||||
|
if (containerWidth == leftPaneWidth) { |
||||||
|
containerWidth = preferredWidth; |
||||||
|
} else { |
||||||
|
setPreferredWidth(containerWidth); |
||||||
|
containerWidth = leftPaneWidth; |
||||||
|
} |
||||||
|
refreshContainer(); |
||||||
|
if (BaseUtils.isAuthorityEditing()) { |
||||||
|
DesignerContext.getDesignerFrame().doResize(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void paint(Graphics g) { |
||||||
|
Image button; |
||||||
|
|
||||||
|
g.drawImage(UIConstants.DRAG_BAR, 0, 0, containerWidth, topToolPaneHeight, null); |
||||||
|
if (containerWidth == leftPaneWidth) { |
||||||
|
if (model == UIConstants.MODEL_NORMAL) { |
||||||
|
button = UIConstants.DRAG_LEFT_NORMAL; |
||||||
|
} else { |
||||||
|
button = UIConstants.DRAG_LEFT_PRESS; |
||||||
|
} |
||||||
|
} else { |
||||||
|
if (model == UIConstants.MODEL_NORMAL) { |
||||||
|
button = UIConstants.DRAG_RIGHT_NORMAL; |
||||||
|
} else { |
||||||
|
button = UIConstants.DRAG_RIGHT_PRESS; |
||||||
|
} |
||||||
|
} |
||||||
|
// g.drawImage(button, 2, ARROW_MARGIN_VERTICAL, 5, toolPaneHeight, null);
|
||||||
|
g.drawImage(button, 20, 7, 5, 5, null); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue