Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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-如何防止BorderLayout EAST占据屏幕的一侧?_Java_Swing - Fatal编程技术网

Java-如何防止BorderLayout EAST占据屏幕的一侧?

Java-如何防止BorderLayout EAST占据屏幕的一侧?,java,swing,Java,Swing,如果我在东侧或西侧添加像JButtons这样的组件,如何防止它紧贴屏幕一侧?我想在JButtons和屏幕边缘之间留出一些空间。在JButton上调用setboorder,如下所示: setBorder( new EmptyBorder( 3, 3, 3, 3 ) ) 在JavaDoc中,EmptyBorder是“占用空间但不绘制的透明边框”。在我的示例中,它将分别取3个像素,分别为顶部、左侧、底部和右侧 完整的代码,其目的只是演示如何使用EmptyOrder: import java.awt.

如果我在东侧或西侧添加像
JButton
s这样的组件,如何防止它紧贴屏幕一侧?我想在
JButton
s和屏幕边缘之间留出一些空间。

在JButton上调用
setboorder
,如下所示:

setBorder( new EmptyBorder( 3, 3, 3, 3 ) )
在JavaDoc中,EmptyBorder是“占用空间但不绘制的透明边框”。在我的示例中,它将分别取3个像素,分别为顶部、左侧、底部和右侧

完整的代码,其目的只是演示如何使用EmptyOrder:

import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.border.EmptyBorder;

public class ALineBorder {

    public static void main(String args[]) {
        JFrame frame = new JFrame("Line Borders");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton button1 = new JButton("Button1");
        button1.setBorder( new EmptyBorder( 8, 8, 8, 8 ) );
        JButton button2 = new JButton("Button2");
        JButton button3 = new JButton("Button3");
        button3.setBorder( new EmptyBorder( 16, 16, 16, 16 ) );
        Container contentPane = frame.getContentPane();
        contentPane.add(button1, BorderLayout.WEST);
        contentPane.add(button2, BorderLayout.CENTER);
        contentPane.add(button3, BorderLayout.EAST);
        frame.pack();
        frame.setSize(300, frame.getHeight());
        frame.setVisible(true);
    }

}
很可能容器中有(或很快会有)多个按钮,并且希望将它们水平对齐。因此,考虑将按钮嵌入到嵌套的<代码> jPoCTs/COD>中,使用<代码> GridBagLayout < /代码>:

class ButtonPanel extends JPanel {
    ButtonPanel() {
        setLayout(new GridBagLayout());
    }

    @Override
    public Component add(Component button) {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridy = nextGridY++;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.insets = new Insets(3, 3, 3, 3);
        super.add(button, gbc);
        return button;
    }

    int nextGridY;
}

然后将此面板添加到父框架或面板(使用
边框布局

边框布局与边框的名称一致。不过,您可以将东西嵌套在其中,这样您就可以插入一个带有边框的JPanel,然后将按钮放入其中


您可能还想在Netbeans中试用GUI设计器。这真的很不错,对你通常想做的事情(比如在边框上留一个边距等)提供了很多帮助。

+1:
setBorder
是正确的方法,但是将它设置在你的
JPanel
上。否则你必须为每个按钮设置if。是的。。。在我添加的示例中,我在两个按钮上放置了不同的边框,只是为了显示行为。但是Peter是对的。在按钮上显式设置空白边框也会改变按钮的大小和内部布局(至少在系统和金属外观的Vista上是这样)。一定要将其设置在包含面板上。