📄 previewdialog.java
字号:
bottomPanel =new JPanel();
bottomPanel.setLayout(new BorderLayout());
bottomPanel.add(drawScrollPane,BorderLayout.CENTER);
// add panels to preview panel.
setLayout(new BorderLayout());
add(topPanel,BorderLayout.NORTH);
add(bottomPanel,BorderLayout.CENTER);
bottomPanel.addComponentListener(this);
setCanvasSize();
}
/** repaint components*/
public void paint(Graphics g){
super.paint(g);
if (m_outputImage==null)
makeOutputImage();
if (m_outputImage!=null)
m_canvas.repaint();
}
/** repaint components*/
public void update(Graphics g){
paint(g);
}
public void componentHidden(ComponentEvent e) {
}
public void componentMoved(ComponentEvent e) {
}
public void componentResized(ComponentEvent e) {
resizeComponents();
}
public void componentShown(ComponentEvent e) {
resizeComponents();
}
/** resize components*/
public void resizeComponents(){
/*
Dimension d;
Rectangle r =bottomPanel.getVisibleRect();
int width =(int)r.getWidth();
int height =(int)r.getHeight();
d =new Dimension(width-10,height-10);
drawScrollPane.setPreferredSize(new Dimension(d));
drawScrollPane.setSize(new Dimension(d));
*/
setCanvasSize();
}
public void itemStateChanged(ItemEvent e){
//comboItemChanged();
}
//Handle clicks on buttons.
public void actionPerformed(ActionEvent e) {
String cmd =e.getActionCommand();
if (CMD_CLOSEBTN_CLICK.equals(cmd)) {
m_dialog.setVisible(false);
}else if (CMD_PRINTBTN_CLICK.equals(cmd)) {
GlobalSettings m_settings =GlobalSettings.getInstance();
ExportBase export =new ExportPrinter();
double zoomScale =(1.0d * JFPageFormat.INCH) / JFPageFormat.INCH_SCREEN;
export.setPage( m_canvas.getPage(),true,zoomScale,
m_settings.isExportWithGrid(),
m_settings.isExportWithRuler(),
m_canvas.isMetric(),
m_canvas.getGridFormat());
export.export();
return;
}else if (CMD_ZOOMINBTN_CLICK.equals(cmd)) {
m_zoomScale =ZoomDialog.nextBigZoomScale(m_zoomScale);
setCanvasSize();
makeOutputImage();
m_canvas.repaint();
return;
}else if (CMD_ZOOMOUTBTN_CLICK.equals(cmd)) {
m_zoomScale =ZoomDialog.nextSmallZoomScale(m_zoomScale);
setCanvasSize();
makeOutputImage();
m_canvas.repaint();
return;
}else if (CMD_ZOOMSETUPBTN_CLICK.equals(cmd)) {
JFrame f =GUIUtils.getJFrame(this);
m_zoomScale =ZoomDialog.getNewZoomScale(f,m_zoomScale);
setCanvasSize();
makeOutputImage();
m_canvas.repaint();
}else if (CMD_NEXTPAGEBTN_CLICK.equals(cmd)) {
int pageIndex =m_currPage;
pageIndex++;
if (pageIndex>=m_totalPage)
pageIndex =m_totalPage-1;
if (pageIndex>m_currPage){
m_currPage =pageIndex;
setCurrentPageText(m_currPage+1,m_totalPage);
m_canvas.repaint();
}
}else if (CMD_PRIORPAGEBTN_CLICK.equals(cmd)) {
int pageIndex =m_currPage;
pageIndex--;
if (pageIndex<0)
pageIndex=0;
if (pageIndex<m_currPage){
m_currPage =pageIndex;
setCurrentPageText(m_currPage+1,m_totalPage);
m_canvas.repaint();
}
}
}
}
/** Preview canvas class is used to drawing preview graphs. */
class PreviewCanvas extends JPanel
implements Scrollable,MouseListener{
/**an internal log utility*/
private static JFLogger m_logger=JFLogManager.getLogger("com.jfimagine.jfdraw.gui.dialog.PreviewDialog$PreviewCanvas");
/** for scrolling increment. */
private double m_maxUnitIncrement = 1;
/** JFPage data for this canvas.*/
private JFPage m_page;
/** if is under metric or english measurement.*/
private boolean m_isMetric =true;
/** grid of this canvas.*/
private GridFormat m_gridFormat =new GridFormat();
/** grid of this canvas.*/
double m_zoomScale =1;
/** A reference to preview panel.*/
PreviewPanel m_previewPanel;
public double getZoomScale(){
return m_zoomScale;
}
public void setZoomScale(double zoomScale){
this.m_zoomScale =zoomScale;
if (m_page!=null)
m_page.setZoomScale(zoomScale);
}
public boolean isMetric() {
return m_isMetric;
}
public void setIsMetric(boolean isMetric) {
this.m_isMetric = isMetric;
}
/** set current grid format
* @param gridFormat A new grid format.
*/
public void setGridFormat(GridFormat gridFormat){
m_gridFormat.setValue(gridFormat);
}
/** get current grid format
* @return the grid format.
*/
public GridFormat getGridFormat(){
return m_gridFormat;
}
/**
* get drawing page.
* @return current drawing page.
*/
public JFPage getPage(){
return m_page;
}
/**
* Constructor
* @param page A drawing page data.
*/
public PreviewCanvas(PreviewPanel panel,JFPage page, boolean isMetric, GridFormat gridFormat) {
setOpaque(true);
setBackground(Color.white);
try{
m_previewPanel =panel;
m_page =(JFPage)page.clone();
JFClipboard.finishLoading(m_page,1);
m_isMetric =isMetric;
m_gridFormat.setValue(gridFormat);
setAutoscrolls(true); //enable synthetic drag events
addMouseListener(this); //handle mouse events(e.g. click, press,release)
}catch(Exception e){
m_logger.error("PreviewCanvas: "+e);
}
}
/** repaint components*/
public void update(Graphics g){
paint(g);
}
/** repaint all graphs*/
public void paint(Graphics g){
super.paint(g);
if (m_page==null)
return;
if (m_previewPanel==null)
return;
Graphics2D g2 =(Graphics2D)g;
//clear background
Dimension d =getPreferredSize();
g2.setBackground(Color.white);
g2.clearRect(0, 0, d.width, d.height);
//get the specified tiled page rectangle:
ExportBase exporter =m_previewPanel.getExporter();
if (exporter==null) return;
int currentPage =m_previewPanel.getCurrentPage();
OutputPage outputPage =exporter.getOutputPage();
if (outputPage==null)
return;
Rect rect =outputPage.getTiledPageArea(currentPage);
Image fullImage =m_previewPanel.getOutputImage();
if (fullImage==null) return;
//imageable position:
JFPageFormat pageFormat =m_page.getPageFormat();
int x =(int)pageFormat.getPageFormat().getImageableX();
int y =(int)pageFormat.getPageFormat().getImageableY();
Dimension position =JFPageFormat.getScreenDimension(new Dimension(x,y));
x =(int)(position.getWidth()* m_zoomScale);
y =(int)(position.getHeight()* m_zoomScale);
//draw image:
int destx1 =x;
int desty1 =y;
int destx2 =(int)(x + rect.getWidth());
int desty2 =(int)(y + rect.getHeight());
int sourcex1 =(int)rect.getX();
int sourcey1 =(int)rect.getY();
int sourcex2 =(int)(rect.getX()+rect.getWidth());
int sourcey2 =(int)(rect.getY()+rect.getHeight());
g2.drawImage(fullImage,destx1,desty1,destx2,desty2,sourcex1,sourcey1,sourcex2,sourcey2,this);
}
/**
* Mouse press method required by the MouseListener interface.
* @param e A mouse press event.
*/
public void mousePressed(MouseEvent e) {
}
/**
* Mouse release method required by the MouseListener interface.
* @param e A mouse release event.
*/
public void mouseReleased(MouseEvent e) {
}
/**
* Mouse enter method required by the MouseListener interface.
* @param e A mouse enter event.
*/
public void mouseEntered(MouseEvent e) {
}
/**
* Mouse exit method required by the MouseListener interface.
* @param e A mouse exit event.
*/
public void mouseExited(MouseEvent e) {
}
/**
* Mouse click method required by the MouseListener interface.
* @param e A mouse click event.
*/
public void mouseClicked(MouseEvent e) {
}
/** implements parent method in Interface Scrollable*/
public Dimension getPreferredScrollableViewportSize() {
return getPreferredSize();
}
/** implements parent method in Interface Scrollable*/
public int getScrollableUnitIncrement(Rectangle visibleRect,
int orientation,
int direction) {
//Get the current position.
int currentPosition = 0;
if (orientation == SwingConstants.HORIZONTAL) {
currentPosition = visibleRect.x;
} else {
currentPosition = visibleRect.y;
}
//Return the number of pixels between currentPosition
//and the nearest tick mark in the indicated direction.
if (direction < 0) {
int newPosition =(int)(currentPosition -
(currentPosition / m_maxUnitIncrement)
* m_maxUnitIncrement);
return (newPosition == 0) ? (int)m_maxUnitIncrement : newPosition;
} else {
return (int)(((currentPosition / m_maxUnitIncrement) + 1)
* m_maxUnitIncrement
- currentPosition);
}
}
/** implements parent method in Interface Scrollable*/
public int getScrollableBlockIncrement(Rectangle visibleRect,
int orientation,
int direction) {
if (orientation == SwingConstants.HORIZONTAL) {
return (int)(visibleRect.width - m_maxUnitIncrement);
} else {
return (int)(visibleRect.height - m_maxUnitIncrement);
}
}
/** implements parent method in Interface Scrollable*/
public boolean getScrollableTracksViewportWidth() {
return false;
}
/** implements parent method in Interface Scrollable*/
public boolean getScrollableTracksViewportHeight() {
return false;
}
/** set current max unit increment while scrolling
* @param pixels Pixels as unit for scrolling.
*/
public void setMaxUnitIncrement(int pixels) {
m_maxUnitIncrement = pixels;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -