将 JPanel 大小设置为以很小的边距填充父级
Posted
技术标签:
【中文标题】将 JPanel 大小设置为以很小的边距填充父级【英文标题】:Set the JPanel size to fill parent with little margin 【发布时间】:2012-04-12 11:28:44 【问题描述】:我有两个 Jpanel(JpanelLeft 和 JpanelLeftContent)我怎样才能使 JpanelLeftContent 填充父尺寸并在左侧和右侧留出一点边距。我尝试了不同的布局并尝试修改 hgap 和 vgap 值,但它们都没有给我一个好的结果。
JPanel JpanelLeft = new JPanel();
JPanel JpanelLeftContent = new JPanel();
JpanelLeft.add(JpanelLeftContent);
如果可能的话,我怎样才能让 JpanelLeftContent 看起来像一个圆角矩形,如图所示。
【问题讨论】:
***.com/questions/3056089/… 或 javafaq.nu/java-example-code-800.html 你的 JRE 版本是什么,在 1.7 中你可以使用内置函数(圆角矩形)来做到这一点? 这是我忘记在 [圆角矩形](docs.oracle.com/javase/7/docs/api/javax/swing/…, int, boolean)) 之前添加的链接 正是,这正是我需要的,谢谢 @IMManis_tn : 你很受欢迎并且保持微笑:-),虽然 1.7 有很多错误,这可能会在很多时候产生奇怪的行为:( 【参考方案1】:..我怎样才能让 JpanelLeftContent 看起来像一个圆角矩形,如图所示。
请参阅TextBubbleBorder
了解开始。
显然,您需要删除底部的小v
,并将底部边框进一步向下推。该代码没有经过全面测试,需要进一步的调整和修复。 '不包括电池'。
【讨论】:
@nIcEcOw 你的也是 +1'able(之前已经完成)。我怀疑它解决了我的方法可能遇到的一些问题(使用插图)。 但是使用 JRE 1.7,我们永远无法说,还会带来什么错误,因为同样的事情也会持续存在,水平调整 LOL :(【参考方案2】:看看Border
s 是如何工作的。特别是 BorderFactory.createEmptyBorder(int top, int left, int bottom, int right)
可能会有帮助。
【讨论】:
【参考方案3】:试试这个代码示例:
import java.awt.*;
import javax.swing.*;
public class InsetTesting extends JFrame
private void createAndDisplayGUI()
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setLocationByPlatform(true);
JPanel contentPane = new JPanel();
contentPane.setOpaque(true);
contentPane.setBorder(BorderFactory.createLineBorder(
Color.DARK_GRAY.darker(), 5, true));
contentPane.setBackground(Color.WHITE);
add(contentPane, BorderLayout.CENTER);
pack();
setVisible(true);
public Insets getInsets()
return (new Insets(30, 20, 10, 20));
public Dimension getPreferredSize()
return (new Dimension(200, 400));
public static void main(String\u005B\u005D args)
SwingUtilities.invokeLater(new Runnable()
public void run()
new InsetTesting().createAndDisplayGUI();
);
这是相同的输出:
【讨论】:
【参考方案4】:要使 JPanel 显示为圆形,您需要创建自己的扩展 JPanel 的类,覆盖paintComponent 并将面板绘制为椭圆Javadoc here 这将创建一个自定义对象,即 JPanel。
当您指定椭圆的大小时,您希望从父面板获取 Y 和 X 值(因为您将在另一个面板上添加椭圆),然后从 X 中减去所需的像素数-轴。这可以通过将这些值传递给“椭圆面板”构造函数来实现。
【讨论】:
但是当重新调整父面板的大小时,JpanelLeftContent 也会重新调整大小吗?我也应该重写重绘方法吗? 您可以使用 setter 为椭圆面板设置“新”值,然后调用 repaint “你需要创建自己的扩展 JPanel 的类” 不一定。我认为边框是追求此功能的更好策略。看我的回答。以上是关于将 JPanel 大小设置为以很小的边距填充父级的主要内容,如果未能解决你的问题,请参考以下文章