7

アプリケーションの上部に、JLabelの両側にいくつかのボタンがあるバーがあります。ボタンの可視性は、ユーザーが実行している現在のタスクに依存し、ボタンのテキストの1つも現在の状態に応じて変化する可能性があります。

私がやりたいのは、JPanelの左側にいくつかのボタンを貼り付け、JPanelの中​​心にJLabelの中心を配置し、JPanelの右側に残りのボタンを配置することです。

これまで、さまざまな方法やレイアウトマネージャーを使用して、ボタンを左右に貼り付けることができましたが、JLabelの中心をJPanelのデッドセンターに配置することはできません。私が何とか得た最高のものは、中央に十分近いラベルですが、ボタンが表示に設定されているか、テキストが変更されると、ラベルが動き回ります。

JLabelを強制的にデッドセンターのままにすることは可能ですか?

注:ボタンがJLabelのいずれかの端に合うほど大きくなることはないため、問題はありません。

4

5 に答える 5

9

BoxLayoutX_AXISレイアウトを使用して、コンテナに追加することもできます

編集:これが例です

panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.add(Box.createHorizontalGlue());
panel.add(innerPanel);
panel.add(Box.createHorizontalGlue());
于 2011-03-17T22:24:04.293 に答える
4

私が見ているように、ラベルを適切なサイズで表示する必要があります。次に、ウィンドウで使用可能な残りのスペースを均等に埋めるために、左右のパネルが必要です。

相対レイアウトクラスを使用できます。

import java.awt.*;
import javax.swing.*;

public class RelativeSSCCE extends JPanel
{
    public RelativeSSCCE()
    {
        JPanel left = new JPanel( new FlowLayout(FlowLayout.LEFT) );
        left.add( new JButton("L1") );
        left.add( new JButton("L2") );
        left.add( new JButton("L3") );

        JLabel center = new JLabel("Centered");

        JPanel right = new JPanel( new FlowLayout(FlowLayout.RIGHT) );
        right.add( new JButton("Right1") );
        right.add( new JButton("Right2") );
        right.add( new JButton("Right3") );

        // choose your layout manager here

        setLayout( new RelativeLayout() );
        Float ratio = new Float(1);
        add(left, ratio);
        add(center);
        add(right, ratio);
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("Basic RelativeSSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new RelativeSSCCE() );
        frame.setSize(600, 100);
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}
于 2011-03-18T00:12:02.193 に答える
3

BorderLayoutを使用します。BorderLayout.CENTER制約を使用してJLabelを追加し、BorderLayout.EASTおよびBorderLayout.WEST制約を使用してJPanelのペアを追加します。適切なJPanelにボタンを追加します。

テキストを中央に表示するには、ラベルのhorizo​​ntalAlignmentをJLabel.CENTERに設定する必要もあります。

于 2011-03-17T22:14:23.340 に答える
2
setAlignmentX(java.awt.Component.CENTER_ALIGNMENT)

setAlignmentY(java.awt.Component.CENTER_ALIGNMENT) 

中央に配置する必要のある要素(JPanelなど)で使用すると役立つ場合があります

于 2013-04-03T16:09:07.493 に答える
0

私はネクロポスティングしているかもしれませんが、setAlignmentX(java.awt.Component.CENTER_ALIGNMENT)とsetAlignmentY(java.awt.Component.CENTER_ALIGNMENT)が役立つかもしれません...

于 2013-04-03T16:01:24.590 に答える