Java 适合JPanel的最大组件大小

Java 适合JPanel的最大组件大小,java,swing,jpanel,Java,Swing,Jpanel,我正在尝试将一个图像放入JPanel中。我找到JPanel的宽度和高度,并缩放图像,使其具有与JPanel相同的宽度和高度。我的问题是图像稍微超出了JPanel 一个简单的例子是 public class TestJPanel { /** * @param args */ public static void main(final String[] args) { final JFrame jf = new JFrame(); final JButton jb = new

我正在尝试将一个图像放入JPanel中。我找到JPanel的宽度和高度,并缩放图像,使其具有与JPanel相同的宽度和高度。我的问题是图像稍微超出了JPanel

一个简单的例子是

public class TestJPanel {

/**
 * @param args
 */
public static void main(final String[] args) {
    final JFrame jf = new JFrame();

    final JButton jb = new JButton("100by100");
    jb.setPreferredSize(new Dimension(100,100));

    final JPanel jp = new JPanel();
    jp.setPreferredSize(new Dimension(100, 100));

    System.out.println(jp.getInsets());

    jp.add(jb);

    jf.getContentPane().add(jp);
    jf.pack();

    jf.setVisible(true);
}
}
在这种情况下,按钮稍微位于JPanel的外部。 除了
JPanel.getWidth()
和等效高度方法之外,还有其他方法可以找到放入JPanel的组件的最大尺寸吗

编辑

我认为这是布局经理的问题。在我的应用程序中,我使用的是GridBagLayout

将上述示例更改为以下内容可防止按钮被切断

public class TestJPanel {

/**
 * @param args
 */
public static void main(final String[] args) {
    final JFrame jf = new JFrame();

    final JButton jb = new JButton("100by100");
    jb.setPreferredSize(new Dimension(100,100));

    final JPanel jp = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
    jp.setPreferredSize(new Dimension(100, 100));

    System.out.println(jp.getInsets());

    jp.add(jb);

    jf.getContentPane().add(jp);
    jf.pack();

    jf.setVisible(true);
}
}

正如我在问题中所说,问题出在布局经理身上。在我的应用程序中,这不是问题所在,因为我正在使用。我有一系列JComponents,其中一个是没有空边框的扩展


我发现诀窍是,与此类似,将组件上的边框设置为空边框。

按钮在JPanel之外是什么意思?你是怎么知道的?如果你向一个容器中添加了一些东西,它就不应该占用容器边界之外的空间。为什么你需要JPanel与JButton具有相同的大小?在这种情况下,您根本不需要JPanel。考虑使用<代码> SwitualUptudio.VoCuelAtter()/代码>我可以看到JButt的底部被切断。在我的应用程序中,我必须平移才能看到图像的其余部分,但它应该紧贴在JPanel中。这是一个你能否在帧中看到整个JPanel的问题。无论按钮是否安装在JPanel内。如果按钮比JPanel大,按钮的碎片将被永久切断,并且不能通过平移取回。