NetBeans GUIビルダーを使用してレイアウトを処理しており(LayoutManagersではひどいです)、単純なJLabelを配置して、親JPanel内で常に(水平方向に)中央に配置しようとしています。理想的には、これはJPanelのサイズが変更された場合でも当てはまりますが、それが非常に多くのコーディングである場合は、JPanelが最初に作成されたときに中央に配置するだけで十分です。
自分でレイアウトを処理しようとするのは十分に悪いですが、NetBeans GUI Builderが不変のコードを自動生成するため、このセンタリングを行う方法を理解することができず、オンラインで役立つものを見つけることができませんでした。
私を正しい方向に導くことができる人に感謝します!
Borderlayout を使用すると、 JComponents のいずれかをCENTER領域に配置できます。例については、 Stack Overflowの質問への回答JPanels間のギャップを取り除く を参照してください。これはうまくいくはずです。
コンポーネントを中央に配置する4つの方法は次のとおりです。
import Java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
class CenterComponent {
public static JLabel getLabel(String text) {
return getLabel(text, SwingConstants.LEFT);
}
public static JLabel getLabel(String text, int alignment) {
JLabel l = new JLabel(text, alignment);
l.setBorder(new LineBorder(Color.RED, 2));
return l;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JPanel p = new JPanel(new GridLayout(2,2,4,4));
p.setBackground(Color.black);
p.setBorder(new EmptyBorder(4,4,4,4));
JPanel border = new JPanel(new BorderLayout());
border.add(getLabel(
"Border", SwingConstants.CENTER), BorderLayout.CENTER);
p.add(border);
JPanel gridbag = new JPanel(new GridBagLayout());
gridbag.add(getLabel("GridBag"));
p.add(gridbag);
JPanel grid = new JPanel(new GridLayout());
grid.add(getLabel("Grid", SwingConstants.CENTER));
p.add(grid);
// from @0verbose
JPanel box = new JPanel();
box.setLayout(new BoxLayout(box, BoxLayout.X_AXIS ));
box.add(Box.createHorizontalGlue());
box.add(getLabel("Box"));
box.add(Box.createHorizontalGlue());
p.add(box);
JFrame f = new JFrame("Streeeetch me..");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(p);
f.pack();
f.setLocationByPlatform(true);
f.setVisible(true);
}
});
}
}
BoxLayoutを使用しても、次のことを実現できます。
JPanel listPane = new JPanel();
listPane.setLayout(new BoxLayout(listPane, BoxLayout.X_AXIS ));
JLabel label = new JLabel();
listPane.add(Box.createHorizontalGlue());
listPane.add(label);
listPane.add(Box.createHorizontalGlue());
mKorbelのソリューションはあなたの目標に最適です。とにかく、BoxLayoutは非常に柔軟性があるので、いつも提案したいと思います。
Mara:「ご回答ありがとうございます。ただし、NetBeans GUIビルドはGroupLayoutを使用しているため、これを上書きすることはできません。」
正しくありません! NetBeans GUIビルダーのJFrame(またはその他のGUIコンテナー)内の任意の場所を右クリックして、「レイアウトの設定」を選択します。デフォルトでは、グループレイアウトである「フリーデザイン」が選択されていますが、mKorbelのアドバイスに従って、ボーダーレイアウトを含む他のレイアウトを選択できます。
使用するレイアウトマネージャーに応じて、これを行う方法はたくさんあります。 コンテナ内のコンポーネントのレイアウト チュートリアルを読むことをお勧めします。
レイアウトマネージャーに関係なく、次のことが機能すると思います。