我现在有一个面版,我想让它缩放,且上面的子组件也跟着变换大小,我做了一个例子,不过只能
将面版以及它的子组件的UI缩放,而无法将组件真正的缩放,下面是我做的例子, package print;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.AffineTransform;
import java.awt.geom.Line2D; import javax.swing.*;
public class PrintTest2 extends JFrame {
AffineTransform trans;//用来控制面版缩放的对象; public PrintTest2(){
setSize(800, 600);
PanelZzg panelzzg=new PanelZzg();
panelzzg.setPreferredSize(new Dimension(900,700));
JScrollPane jscrollpane=new JScrollPane(panelzzg); add(jscrollpane,BorderLayout.CENTER); setVisible(true);
} public static void main(String[] args){
PrintTest2 a=new PrintTest2();
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } class PanelZzg extends JPanel{ JButton btn;
JLabel lab;
JToggleButton a;
AbstractButton b;
public PanelZzg(){
setLayout(null);
a=new JToggleButton("kdkfj");
setBackground(Color.BLUE);
btn=new JButton("可是可靠 可是扩大 ");
btn.setBounds(120,60,120,60);
lab=new JLabel("skdfjklsdjflsksdfs");
lab.setOpaque(true);
lab.setBounds(200,200,100,100);
a.setBounds(200,400,100,60); add(a);
add(btn);
add(lab);
setSize(800,600);
trans=new AffineTransform();
trans.scale(0.5, 0.5);//设置缩放的陪数; setVisible(true); }
public void paint(Graphics g){
Graphics2D g2=(Graphics2D)g;
g2.setTransform(trans);//设置画笔坐标系的缩放
super.paintComponent(g2);
super.paintChildren(g2); }
} }
将面版以及它的子组件的UI缩放,而无法将组件真正的缩放,下面是我做的例子, package print;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.AffineTransform;
import java.awt.geom.Line2D; import javax.swing.*;
public class PrintTest2 extends JFrame {
AffineTransform trans;//用来控制面版缩放的对象; public PrintTest2(){
setSize(800, 600);
PanelZzg panelzzg=new PanelZzg();
panelzzg.setPreferredSize(new Dimension(900,700));
JScrollPane jscrollpane=new JScrollPane(panelzzg); add(jscrollpane,BorderLayout.CENTER); setVisible(true);
} public static void main(String[] args){
PrintTest2 a=new PrintTest2();
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } class PanelZzg extends JPanel{ JButton btn;
JLabel lab;
JToggleButton a;
AbstractButton b;
public PanelZzg(){
setLayout(null);
a=new JToggleButton("kdkfj");
setBackground(Color.BLUE);
btn=new JButton("可是可靠 可是扩大 ");
btn.setBounds(120,60,120,60);
lab=new JLabel("skdfjklsdjflsksdfs");
lab.setOpaque(true);
lab.setBounds(200,200,100,100);
a.setBounds(200,400,100,60); add(a);
add(btn);
add(lab);
setSize(800,600);
trans=new AffineTransform();
trans.scale(0.5, 0.5);//设置缩放的陪数; setVisible(true); }
public void paint(Graphics g){
Graphics2D g2=(Graphics2D)g;
g2.setTransform(trans);//设置画笔坐标系的缩放
super.paintComponent(g2);
super.paintChildren(g2); }
} }
你想,你在Windows里把一个窗口缩小的时候,按钮并不会缩小吧?
最好的方式也许是组件之间的距离随着窗口大小的变化而变化。
import java.awt.event.*;
import javax.swing.*; public class PrintTest2 extends JFrame { public PrintTest2(){
setSize(800, 600);
PanelZzg panelzzg=new PanelZzg();
panelzzg.setPreferredSize(new Dimension(900,700));
JScrollPane jscrollpane=new JScrollPane(panelzzg); add(jscrollpane,BorderLayout.CENTER); setVisible(true);
} public static void main(String[] args){
PrintTest2 a=new PrintTest2();
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } class PanelZzg extends JPanel{ JButton btn;
JLabel lab;
JToggleButton a;
AbstractButton b;
JPanel p = this;
public PanelZzg(){
setLayout(null);
a=new JToggleButton("kdkfj");
setBackground(Color.BLUE);
btn=new JButton("点我");
btn.setBounds(120,60,120,60);
lab=new JLabel("skdfjklsdjflsksdfs");
lab.setOpaque(true);
lab.setBounds(200,200,100,100);
a.setBounds(200,400,100,60); add(a);
add(btn);
add(lab);
setSize(800,600);
btn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
tranform(p, 0.5, 0.5);
}
}); setVisible(true); } //此函数将一个Container缩小到指定比例
public void tranform(Container c, double scaleX, double scaleY)
{
c.setBounds((int)(c.getX() * scaleX),
(int)(c.getY() * scaleY),
(int)(c.getWidth() * scaleX),
(int)(c.getHeight() * scaleY));Component[] cs = c.getComponents();for (int i = 0; i < cs.length; i++) {
if (cs[i] instanceof Container) {
tranform((Container)cs[i], scaleX, scaleY);
}
else {
cs[i].setBounds((int)(cs[i].getX() * scaleX),
(int)(cs[i].getY() * scaleY),
(int)(cs[i].getWidth() * scaleX),
(int)(cs[i].getHeight() * scaleY));
}
}
}
}
}