Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要帮助理解JButton';s getInsets()方法_Java_Swing - Fatal编程技术网

Java 需要帮助理解JButton';s 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 {

我很难理解JButton的getInsets()方法的返回值。在阅读文档时,我发现getInsets()方法返回按钮边框的插入(如果在按钮上设置了边框),它指定边框自身绘制所需的空间量

但是,在执行以下代码时:

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!