当前位置: 首页 > 面试题库 >

BorderLayout无法正确显示

林君博
2023-03-14
问题内容

我想要一个JFrame,在左右两侧有一个边框,边框为黑色,宽度为withfOfJFrame / 10。

现在,我的尝试如下所示:

JFrame f = new JFrame();
f.setSize(800, 600);
f.setLayout(new BorderLayout());

JPanel leftBorder = new JPanel();
JPanel rightBorder = new JPanel();
leftBorder.setBackground(Color.black);
rightBorder.setBackground(Color.black);
leftBorder.setSize(f.getWidth()/10, f.getHeight());
rightBorder.setSize(f.getWidth()/10, f.getHeight());
JPanel center = new JPanel();
center.setBackground(Color.red);

f.add(leftBorder, BorderLayout.WEST);
f.add(center, BorderLayout.CENTER);
f.add(rightBorder, BorderLayout.EAST);    
f.setVisible(true);

这会在左右两侧添加一个黑色边框,但是该边框具有固定的大小,并且在调整窗口大小时不会重新计算。大小甚至不是800(JFrame的开始宽度)的1/10。

我究竟做错了什么?还是有更好的方法来做到这一点?


问题答案:

您可以使用GridBagLayout和适当的权重来获得所需的结果:

public class Snippet {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

                JPanel leftBorder = new JPanel();
                JPanel rightBorder = new JPanel();
                leftBorder.setBackground(Color.black);
                rightBorder.setBackground(Color.black);

                JPanel center = new JPanel();
                center.setBackground(Color.red);

                f.setLayout(new GridBagLayout());

                GridBagConstraints gbc = new GridBagConstraints();
                gbc.fill = GridBagConstraints.BOTH;
                gbc.weighty = 1.0;
                gbc.gridy = 0;
                gbc.gridwidth = 1;
                gbc.gridheight = 1;

                gbc.gridx = 0;
                gbc.weightx = 0.1;
                f.add(leftBorder, gbc);

                gbc.gridx = 1;
                gbc.weightx = 0.8;
                f.add(center, gbc);

                gbc.gridx = 2;
                gbc.weightx = 0.1;
                f.add(rightBorder, gbc);

                f.pack();
                f.setVisible(true);
            }
        });
    }
}


 类似资料:
  • 我读过的BorderLayout声明的文档最好使用,,,和。(https://docs.oracle.com/javase/tutorial/uiswing/layout/border.html) 但是,我也找到了使用,,,和的留档。(https://docs.oracle.com/javase/7/docs/api/java/awt/BorderLayout.html)从第一个设置直接映射到这个

  • 问题内容: 我正在从Bootstrap 2.3迁移到Bootstrap3,一切正常。但是,当我尝试添加一些图标时,图标字体无法正确显示。我尝试,仅正确显示了“.glyphicon-envelope”。其他显示如“ E001”等。 我该如何解决这个问题? 对于其他浏览器,字形显示正确,只有Firefox无法正确显示。 问题答案: 好的,以上问题未能解决我的问题。我的字体文件夹与Bootstrap c

  • 我试图创建简单的Recyclerview与视图绑定。 问题是我的回收器视图没有分隔线。似乎我所有的物品都是 排成一排。 以下是我的代码: 这里是activity_main。xml: 这里是recyclerview_rows。xml: 房车。Model.kt: RV_Adapter.kt: MainActivity.kt: 有什么问题? [这里是图像:1

  • 问题内容: 在两台计算机的HTML文件中显示数据库的结果时出现问题。 因此,在一台计算机上它显示的名称是这样的: 数据库的排序规则为,表的排序规则为。 在另一台计算机上,它显示如下(我希望这样): 名称在标签中列出。两种浏览器的语言是英语,并且Html文件在两种环境下都相同,所以我认为这与php.ini文件的字符集或编码有关 我曾尝试更改中的值,但没有任何变化,我在任何地方都找不到答案。 唯一的区

  • 问题内容: 例如,如何转换字符串。我从网站获得的字符串,未在中进行编码。它工作在计划只是罚款使用Swing( ),但是当我过去的链接罐子Windows控制台(要运行的应用程序),它不显示在字符串中正确的字符的字符和。 我从网站上得到那串 。如何在Swing应用程序中进行编码或显示,因此当我运行应用程序时,它将向我显示此字符(以及课程的其他unicode字符(“Ž”,“ž”,“č”和“Š”) )?

  • 问题内容: 我有以下几行: 我将其放在MouseAdapter中的mouseReleased方法中。 基本上,我想使标签在单击时以半透明的绿色突出显示。 我在面板中有几个标签,所有标签都添加了此MouseAdapter。 我的问题是这样的: -当我单击标签时,它显示半透明的绿色,但是显示的是ANOTHER JLabel的背景,而不是我单击的背景。 无论我单击哪个标签,它始终会绘制同一标签的背景。