适合JPanel的最大组件大小

时间:2012-12-05 11:17:40

标签: 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 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);
}
}

1 个答案:

答案 0 :(得分:0)

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

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