1

私は JButtons を作成し、それらを垂直に配置するように設定された BoxLayout を使用して JPanel に追加するプログラムを持っています。最初のボタンが JPanel から意図的に削除されることがあります。最初、ボタンは正しく中央に配置され、ボタンも正常に削除されています。問題は、残りのボタンが離れてスペースを埋めることです。これは私が望んでいることではありません。代わりに、離れずにy軸に沿って中心を合わせ直してもらいたいのです。

JPanel を拡張するクラスがあります。コンストラクターで BoxLayout が作成されます。

setPreferredSize(new Dimension(150, 500));
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
setAlignmentY(CENTER_ALIGNMENT);

ボタンの作成は現在、このクラスのメソッドです。

createButtons(int numButtons){
for (int i=0;i<numButtons;i++) {
    add(new JButton());
}

削除は別の方法です。

removeButton(){
    if(getComponentCount()>1){
        remove(0);
        validate();
        repaint();
    }
}

含まれているパネルを埋めるためにバラバラに広がることなく、ボタンをy軸に沿って中央に配置する方法を知っている人はいますか?

4

3 に答える 3

1

目に見えないコンポーネントをフィラー(接着剤)として使用するBoxLayoutsの接着剤について聞いたことがありますか?これはボタンを中央に保つのに役立つと思います。次の2つのリンクを参照してください:BoxLayoutドキュメントBoxLayout-フィラーこのサイトにもBoxlayoutに関する優れたチュートリアルがあります接着剤付き:BoxLayout接着剤これ

于 2012-07-02T13:08:12.480 に答える
1

私はあなたの問題を理解していません。手順が間違っている可能性がありますが、次のスニペットでは、すべてのコンポーネントが水平方向に中央に配置され、上部に配置されています。コンポーネントが削除されるたびに、下のボタンが自動的に上部にスタックされます。このスニペットから始めて、問題が何であるかを示してください。

import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestButtons {

    protected void createAndShowGUI() {
        JFrame frame = new JFrame("Test buttons/BoxLayout");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final JPanel panel = new JPanel();
        panel.setBorder(BorderFactory.createLineBorder(Color.RED));
        // panel.setPreferredSize(new Dimension(150, 500));
        BoxLayout mgr = new BoxLayout(panel, BoxLayout.Y_AXIS);
        panel.setLayout(mgr);
        for (int i = 0; i < 5; i++) {
            final JButton button = new JButton("Remove Hello World " + (i + 1));
            button.setAlignmentX(Component.CENTER_ALIGNMENT);
            button.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    panel.remove(button);
                    panel.revalidate();
                    panel.repaint();
                }
            });
            panel.add(button);
        }
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TestButtons().createAndShowGUI();
            }
        });
    }

}
于 2012-07-02T14:09:50.297 に答える
0

BOX Layoutの使い方の問題だと思います。ボタンは中央に配置されたままですが、追加先のペインの端まで「塗りつぶし」ます。これを行う正しい方法 (作成するボタンの数がわかっている場合) は、setPreferedSize メソッドでグリッド レイアウトを使用することだと思います。

JButton btn = new JButton(String.valueOf(i));
btn.setPreferredSize(new Dimension(40, 40));
panel.add(btn);
于 2012-07-02T13:03:15.447 に答える