缩放JPanel';在java中缩放jpanel时缩放组件
当我缩放JPanel时,它会缩放,其组件也会缩放,但它会转换为绘制的组件,而不是组件本身。如果它是JTextField,并且原始组件保持其大小和位置(如图所示),则我无法控制它或在其上键入 这是我的密码 我制作了这个类中我想放大的面板缩放JPanel';在java中缩放jpanel时缩放组件,java,swing,jpanel,Java,Swing,Jpanel,当我缩放JPanel时,它会缩放,其组件也会缩放,但它会转换为绘制的组件,而不是组件本身。如果它是JTextField,并且原始组件保持其大小和位置(如图所示),则我无法控制它或在其上键入 这是我的密码 我制作了这个类中我想放大的面板 public class designPanel extends JPanel{ public double zoomFactor = 1; public boolean zoomer = true; public AffineTransform at;
public class designPanel extends JPanel{
public double zoomFactor = 1;
public boolean zoomer = true;
public AffineTransform at;
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if (zoomer == true) {
at = g2.getTransform();
at.scale(zoomFactor, zoomFactor);
zoomer = false;
}
g2.transform(at);
}
public void setZoomFactor(double factor){
if(factor<this.zoomFactor){
this.zoomFactor=this.zoomFactor/1.1;
}
else{
this.zoomFactor=factor;
}
this.zoomer=true;
}
public double getZoomFactor() {
return zoomFactor;
}
公共类设计面板扩展了JPanel{
公共双zoomFactor=1;
公共布尔缩放器=true;
公共仿射翻译网站;
@凌驾
公共组件(图形g){
超级组件(g);
图形2d g2=(图形2d)g;
g2.setRenderingHint(renderingHits.KEY\u ANTIALIASING,renderingHits.VALUE\u ANTIALIAS\u ON);
如果(缩放=真){
at=g2.getTransform();
缩放(缩放因子,缩放因子);
zoomer=false;
}
g2.转化(at);
}
public void setZoomFactor(双因素){
如果(系数0){
design_gridPanel.setZoomFactor(design_gridPanel.getZoomFactor()/1.1);
design_gridPanel.revalidate();
design_gridPanel.repaint();
}
}});
可能重复;我要在这里阻止你,缩放一个充满组件的活动容器实际上非常复杂,你不仅需要能够应用缩放,还需要转换所有坐标和鼠标事件-这是大量的工作。。。其他人已经做过的事。JLayer项目(现在JXLayer包含在JDK中)可以提供这一功能,而其他一些j/XLayer也为您提供了很多有趣的东西,包括为、、和所做的这些,因此,这是一个值得花时间学习的API
design_gridPanel.addMouseWheelListener(new MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
if (e.getWheelRotation() < 0) {
design_gridPanel.setZoomFactor(1.1 * design_gridPanel.getZoomFactor());
design_gridPanel.revalidate();
design_gridPanel.repaint();
}
if (e.getWheelRotation() > 0) {
design_gridPanel.setZoomFactor(design_gridPanel.getZoomFactor() / 1.1);
design_gridPanel.revalidate();
design_gridPanel.repaint();
}
}});