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

Java:如何控制JPanel长宽比?

夏侯星洲
2023-03-14
问题内容

我有一个JPanel,我想保留一个正方形,但是我希望它具有一定的大小,以便它填充其父JFrame中可能的最大空间,但仍保持正方形,即它将JFrame的最短边作为正方形宽度。

我已经搜索了整个网络,检查了所有的布局管理器,似乎没有一个简单的解决方案可以解决这个非常简单的问题。


问题答案:

您可以使用GridBagLayoutComponentListener

例如:(启发自:https
:
//community.oracle.com/thread/1265752?start=0&tstart=0)

public class AspectRatio {
    public static void main(String[] args) {
        final JPanel innerPanel = new JPanel();
        innerPanel.setBackground(Color.YELLOW);

        final JPanel container = new JPanel(new GridBagLayout());
        container.add(innerPanel);
        container.addComponentListener(new ComponentAdapter() {
            @Override
            public void componentResized(ComponentEvent e) {
                resizePreview(innerPanel, container);
            }
        });
        final JFrame frame = new JFrame("AspectRatio");
        frame.getContentPane().add(container);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
        frame.setVisible(true);
    }

    private static void resizePreview(JPanel innerPanel, JPanel container) {
        int w = container.getWidth();
        int h = container.getHeight();
        int size =  Math.min(w, h);
        innerPanel.setPreferredSize(new Dimension(size, size));
        container.revalidate();
    }
}


 类似资料:
  • 问题内容: 我有一个带有绘制的背景图像的图像和一个布局管理器,其中包含其他较小的图像,所有这些图像都位于内。背景图像非常大,我希望无论在大显示器还是小显示器上都能保持其宽高比。 最终,我希望能够将其及其较小的图像“粘贴”到背景图片中。 我四处寻找资源,似乎许多示例都使用,但我不是。这会带来问题吗?我将在下面发布用于绘制图像的代码,如果我缺少任何信息,请告诉我。 编辑:我应该提一下,我知道长宽比公式

  • 问题内容: 我试图在单个行上具有多个JTextField,但是我不希望它们具有相同的宽度。如何控制宽度并使其中一些比其他更宽?我希望它们一起占总宽度的100%,所以如果我可以使用某种重量的东西,那将是很好的。 我试过了,但是没有道理。 这是一个示例,其中我使用了三行和三个字符串,这些字符串应按列显示: 问题答案: 所有Swing组件均具有首选大小。文本组件的首选大小基于组件的文本。因此,一般情况下

  • 问题内容: 标签标签没有属性’width’,那么我应该如何控制标签标签的宽度? 问题答案: 当然,使用CSS … 不推荐使用该属性,并且应始终使用CSS来控制这些类型的表示样式。

  • 问题内容: 我正在尝试制作绘画程序的项目中。到目前为止,我已经使用Netbeans来创建GUI并设置程序。 到目前为止,我已经能够调用在其中绘制所需的所有坐标,但是我对如何在其中实际绘制感到非常困惑。 在我的代码接近尾声时,我在面板内部进行绘制的尝试失败。 谁能在这样的示例中解释/显示如何使用图形? 我发现的所有示例都创建了一个类并对其进行扩展,JPanel但是我不知道是否可以这样做,因为它是在n

  • 问题内容: 我已在Java控制台上显示了使用Webstart启动的应用程序的输出消息。有没有一种方法可以清除代码中的控制台消息,而不是由用户手动清除消息? 这些消息以大约每秒1000的速度打印,并且似乎使用了过多的内存,我本可以停止打印到控制台,但要求始终保持打印。 问题答案: 您将无法清除该控制台,除非您在该控制台的类上找到了一些句柄(我怀疑您可以访问该句柄)。 您有一个不可避免的要求,即用户需

  • 我对Spring框架是完全陌生的。我有一个任务是在Spring上制作电话簿应用程序。我需要登记和授权,还有我的电话簿。我有两个控制器,第一个是控制授权和注册的UserController 当我尝试进行身份验证或注册时。新用户我有这样的错误: NestedServletException:请求处理失败;嵌套异常是java.lang.IllegalStateException:映射到HTTP路径“HT