帆软报表设计器源代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

147 lines
4.0 KiB

package com.fr.design.style;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JPanel;
import javax.swing.border.AbstractBorder;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;
import com.fr.design.constants.UIConstants;
import com.fr.design.gui.ibutton.UIToggleButton;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.stable.Constants;
import com.fr.design.style.background.BackgroundJComponent;
/**
* @author kunsnat E-mail:kunsnat@gmail.com
* @version 创建时间:2011-10-31 下午03:28:31 类说明: 抽象出来的弹出box. 可以弹出颜色选择, 图案选择, 纹理选择.
* 主要是 弹出界面的不同
*/
public abstract class AbstractSelectBox<T> extends AbstractPopBox implements MouseListener {
private static final long serialVersionUID = 2355250206956896774L;
private UIToggleButton triggleButton;
protected void initBox(int preWidth) {
this.setLayout(FRGUIPaneFactory.createBorderLayout());
displayComponent = new BackgroundJComponent();
displayComponent.setEmptyBackground();
displayComponent.setBorder(new TriggleLineBorder());
triggleButton = new UIToggleButton(UIConstants.ARROW_DOWN_ICON);
triggleButton.setPreferredSize(new Dimension(20, 20));
JPanel displayPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
displayPane.add(displayComponent, BorderLayout.CENTER);
displayComponent.setPreferredSize(new Dimension(preWidth, displayPane.getPreferredSize().height));
displayComponent.addMouseListener(mouseListener);
triggleButton.addMouseListener(mouseListener);
displayComponent.addMouseListener(this);
triggleButton.addMouseListener(this);
this.add(displayPane, BorderLayout.CENTER);
this.add(triggleButton, BorderLayout.EAST);
this.addAncestorListener(new AncestorListener() {
public void ancestorAdded(AncestorEvent event) {
}
public void ancestorRemoved(AncestorEvent evt) {
hidePopupMenu();
}
public void ancestorMoved(AncestorEvent event) {
hidePopupMenu();
}
});
}
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
displayComponent.setEnabled(enabled);
triggleButton.setEnabled(enabled);
}
@Override
public JPanel initWindowPane(double preWidth) {
// TODO Auto-generated method stub
return null;
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setColor(UIConstants.POP_DIALOG_BORDER);
g2d.drawRoundRect(0, 0, this.getWidth() - 1 , this.getHeight() - 1, 4, 4);
triggleButton.setSelected(isPopupVisible());
}
public void addDemoPaneMouseListener(MouseListener l) {
displayComponent.addMouseListener(l);
triggleButton.addMouseListener(l);
}
public abstract T getSelectObject();
public abstract void setSelectObject(T t);
private class TriggleLineBorder extends AbstractBorder {
private static final long serialVersionUID = 1065857667981063530L;
protected Insets borderInsets = new Insets(0, 0, 0, 0);
public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
g.translate(x, y);
g.setColor(UIConstants.POP_DIALOG_BORDER);
g.translate(-x, -y);
}
public Insets getBorderInsets(Component c) {
return borderInsets;
}
}
@Override
public void mouseEntered(MouseEvent e) {
triggleButton.getModel().setRollover(true);
}
@Override
public void mouseExited(MouseEvent e) {
triggleButton.getModel().setRollover(false);
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}