需求:需要将一个组件显示在界面的正中间部分,并且可以调节居中组件所占整个界面的百分比
分析:由于Java提供的布局管理器并不能提供上诉需求,故需要自己来实现
先上效果图(占据50%)
代码部分
import java.awt.Color; import java.awt.Dimension; import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class MyCenterPanel extends JPanel { /** * */ private static final long serialVersionUID = 1L; private Double rate; //要显示的组件居中占据的百分比 private JComponent c; //最终要显示的JComponent //设置构造函数 public MyCenterPanel(Double rate) { this.setLayout(null); this.rate = rate; } //设置要显示的组件 public void show(JComponent p) { this.c = p; this.add(c); this.updateUI(); this.updateUI(); //有时候执行一次updateUI()方法不能显示出JLabel,所以此处我执行了两遍 } public void repaint() //设置要显示组件的排放位置 { if(c != null) { Dimension cp_size = this.getSize(); c.setSize((int)(cp_size.width*rate),(int)(cp_size.height*rate)); c.setLocation(cp_size.width / 2 - c.getWidth() / 2, cp_size.height / 2 - c.getHeight() / 2); } } public static void main(String[] args) { JFrame f = new JFrame(); f.setVisible(true); f.setSize(1000, 600); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLocationRelativeTo(null); MyCenterPanel mcp = new MyCenterPanel(0.5); f.setContentPane(mcp); JLabel label = new JLabel("我是JLabel",JLabel.CENTER); mcp.show(label); label.setBorder(BorderFactory.createLineBorder(Color.RED)); } }