Java 需要帮助理解JButton';s getInsets()方法
我很难理解JButton的getInsets()方法的返回值。在阅读文档时,我发现getInsets()方法返回按钮边框的插入(如果在按钮上设置了边框),它指定边框自身绘制所需的空间量 但是,在执行以下代码时:Java 需要帮助理解JButton';s getInsets()方法,java,swing,Java,Swing,我很难理解JButton的getInsets()方法的返回值。在阅读文档时,我发现getInsets()方法返回按钮边框的插入(如果在按钮上设置了边框),它指定边框自身绘制所需的空间量 但是,在执行以下代码时: import java.awt.Insets; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class ButtonMarginInsets {
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ButtonMarginInsets {
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setTitle("Test Frame");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = new JPanel();
JButton button = new JButton();
button.setText("Test Button");
System.out.println("Button Border Insets " + button.getBorder().getBorderInsets(button));
button.setMargin(new Insets(100, 10, 10, 10));
System.out.println("Button Insets " + button.getInsets());
contentPane.add(button);
frame.setContentPane(contentPane);
frame.pack();
frame.setVisible(true);
}
}
我将获得以下控制台输出:
按钮边框插入java.awt.Insets[top=5,left=17,bottom=5,right=17]
按钮插入java.awt.Insets[top=103,left=13,bottom=13,right=13]
以及以下框架:
我的问题是:
我认为您可以使用组件插图来实现这一点。因此,可以这样称呼:
Insets insets = component.getInsets();
insets.set(top, left, bottom, right);
您应该在设置组件的边框后执行此操作
Insets是一个简单的类,它包含4个字段:top、left和bottom
对。插图用于描述一个物体周围的填充物
组成部分。Swing中的每个边框都将返回一个插图
对象,该对象描述要为组件添加多少填充
要正确渲染的边框
好的,首先要做的事。正如您在文档中看到的,对
按钮.getInsets()
和getBorderInsets(按钮)
的调用都是相同的,并且得到了(内部,getInsets()
只是调用getBorderInsets(this)
的确认)
现在这已经不存在了,默认情况下,JButton
用一个。如果查看,可以看到用于按钮的CompoundBorder包括:
- 类型为
的外部边框,以及BasicBorders.ButtonBorder
- 类型为
的内边框MarginBorder
MarginBorder
可能是您感兴趣的地方。它具有对getBorderInsets()
的覆盖
总之,一个按钮的边界实际上是两个边界的组合。外部的实际边界线(您传统上认为是“边界”,使其看起来是3d的),再加上内部的边距边界。因此,在执行setMargin()
时,也会影响复合边框的内部
这解释了您的以下结果:
按钮插入java.awt.Insets[top=103,left=13,bottom=13,right=13]
外线的宽度分别为3px,边距(100,10,10,10)为您提供了上面的总边框插图。这就解释了这一点!谢谢@NPras!