Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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文本不在图标中,且设置框不工作_Java_Swing_Jpanel_Jbutton_Layout Manager - Fatal编程技术网

Java JButton文本不在图标中,且设置框不工作

Java JButton文本不在图标中,且设置框不工作,java,swing,jpanel,jbutton,layout-manager,Java,Swing,Jpanel,Jbutton,Layout Manager,我有一个类似这样的面板: class A extends JPanel{ private JButton button; A(int width, int height){ setSize(width, height); button = new JButton("text"); button.setIcon(IconLoadedHere); button.setBounds(50, 50, getWidth()/

我有一个类似这样的面板:

class A extends JPanel{
    private JButton button;

    A(int width, int height){
        setSize(width, height);
        button = new JButton("text");
        button.setIcon(IconLoadedHere);
        button.setBounds(50, 50, getWidth()/5, getHeight()/5);
        button.setBorder(BorderFactory.createEmptyBorder());
        add(button);
     }
}
public class window extends JFrame{
    private JPanel panel;

    public window(){
        panel = new JPanel();
         setTitle("test");
         setSize(1280, 720);
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setVisible(true);
    }
    public void loadA(){
         remove(panel);
         panel = new A(getWidth(), getHeight());
             add(panel);
         validate();
    }
}
JFrame如下所示:

class A extends JPanel{
    private JButton button;

    A(int width, int height){
        setSize(width, height);
        button = new JButton("text");
        button.setIcon(IconLoadedHere);
        button.setBounds(50, 50, getWidth()/5, getHeight()/5);
        button.setBorder(BorderFactory.createEmptyBorder());
        add(button);
     }
}
public class window extends JFrame{
    private JPanel panel;

    public window(){
        panel = new JPanel();
         setTitle("test");
         setSize(1280, 720);
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setVisible(true);
    }
    public void loadA(){
         remove(panel);
         panel = new A(getWidth(), getHeight());
             add(panel);
         validate();
    }
}
按钮有两个问题:

我想把这篇文章放在图像上,这有可能在图像中间吗?目前它出现在它的左边。解决

出于某些奇怪的原因,setBounds不起作用,按钮总是显示在顶部中间,似乎只有在没有布局的情况下才能使用,有没有其他方法可以将按钮的位置和大小设置为“但是我会优先选择”呢

还有一个问题:
如果我想调整窗口的大小,我该怎么做才能使按钮和文本相应地调整大小?目前只找到了逐个更改它们的解决方案,还有其他方法吗?

setBounds仅在使用绝对布局时有效,而JPanel默认使用FlowLayout。要禁用它,我认为是

panel.setLayout(null);

但是,使用绝对布局时,您还必须手动设置x/y/宽度/高度,因此通常最好使用布局。

setBounds仅在使用绝对布局时有效,而JPanel默认使用FlowLayout。要禁用它,我认为是

panel.setLayout(null);

但是,对于绝对布局,您还必须手动设置x/y/宽度/高度,因此通常最好使用布局。

要控制按钮中文本的显示方式,您应该使用:

button.setHorizontalTextPosition(JButton.CENTER);
button.setVerticalTextPosition(JButton.CENTER);
这将把文本放在按钮的中心

默认情况下,水平文本位置设置为尾随,这就是为什么它被定位在图标的一侧


对于问题的布局部分,您应该真正阅读。TLDR:使用布局管理器,它们将为您调整大小和定位。

要控制文本在按钮中的显示方式,您应该使用:

button.setHorizontalTextPosition(JButton.CENTER);
button.setVerticalTextPosition(JButton.CENTER);
这将把文本放在按钮的中心

默认情况下,水平文本位置设置为尾随,这就是为什么它被定位在图标的一侧


对于问题的布局部分,您应该真正阅读。TLDR:使用布局管理器,他们将为您调整大小和定位。

在我的类名和构造函数顶部,第一个字母应该大写,遵循命名约定。1扩展JFrame和JPanel的理由与扩展“无”的JButton的理由一样多。只使用组件实例,除非添加或覆盖功能,否则不要扩展它们。2拆下面板。。添加面板;验证使用一个。我的类名和构造函数的首字母应该大写,遵循命名约定。1扩展JFrame和JPanel的理由与扩展“无”的JButton的理由一样多。只使用组件实例,除非添加或覆盖功能,否则不要扩展它们。2拆下面板。。添加面板;验证我想补充一点:OSX在使用空布局时往往会彻底失败。使用合适的首选大小处理边界、网格和流可以完成任何事情。或者你可以从gridbag开始,它更难,但更“自由”。如果不推荐绝对布局,那么,我如何将按钮放在我喜欢的任何地方?我想补充一点:OSX在使用空布局时往往会彻底失败。使用合适的首选大小处理边界、网格和流可以完成任何事情。或者你可以从gridbag开始,它更难,但更“自由”。如果不推荐绝对布局,那么,我如何将按钮放在我喜欢的地方?