web-dev-qa-db-ja.com

境界線のあるJPanelにパディングを追加する方法

いくつかのJPanelsにパディングを追加したいと思います。私はこの答えを見つけました: https://stackoverflow.com/a/5328475/159032

境界線のないパネルでは問題なく機能しました。しかし、すでに境界線があるパネルに対してどうすればよいですか? (この場合はTitledBorder

私は試した:

JPanel mypanel = new MyPanel(); // Panel that I am going to add a TitledBorder to, but needs padding
mypanel.setBorder(new EmptyBorder(10,10,10,10));
JPanel mypanel_container = new JPanel();
TitledBorder border = BorderFactory.createTitledBorder(BorderFactory.createRaisedBevelBorder(), "My panel");
border.setTitleJustification(TitledBorder.LEADING);
mypanel_container.setBorder(border);
mypanel_container.add(mypanel);
this.add(mypanel_container);

(要するに:EmptyBorderを持つべきパネルにTitledBorderを追加し、次にTitledBorderで別のパネルを作成し、それに最初のパネルを追加して、それを使用しますパネル)

しかし、その後、EmptyBorderのコンストラクター値を無視する大きすぎるパディングが発生しました。

それでグラフィカルな境界線でJPanelにパディングを追加するにはどうすればよいですか?

16
stommestack

CompoundBorder をご覧ください。

外側のBorderオブジェクトのインセット内に内側のBorderオブジェクトをネストすることにより、2つのBorderオブジェクトを1つの境界線に構成するために使用される複合Borderクラス。たとえば、このクラスを使用して、既存の装飾的な境界線を持つコンポーネントに空白の余白スペースを追加できます。

_Border border = comp.getBorder();
Border margin = new EmptyBorder(10,10,10,10);
comp.setBorder(new CompoundBorder(border, margin));
_

もちろん、 BorderFactory#createCompoundBorder(border, margin) を使用することもできます。

32
NiziL