8

私は現在、Eclipse のフォーマッタ設定で使用されているものに似たトグル ボタンのグループを作成しようとしています。

Eclipse のフォーマッター設定

現在、私は次の方法でこれを試みました:

public class Exercise extends JFrame {

    private String[] buttonNames = {"A", "B", "C", "D", "E"};

    Exercise() {
        final JPanel topPanel = new JPanel();
        topPanel.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        int tabCount = 0;
        final ButtonGroup topButtonGroup = new ButtonGroup();
        for (String buttonName : buttonNames) {
            JToggleButton tabButton = new JToggleButton(buttonName);
            topButtonGroup.add(tabButton);
            c.fill = GridBagConstraints.HORIZONTAL;
            c.insets = new Insets(0, -6, 0, -7); // Questionable line
            c.gridx = tabCount;
            c.gridy = 0;
            topPanel.add(tabButton, c);
            tabCount++;
        }
        this.add(topPanel);
        this.setVisible(true);
        this.pack();
    }

    public static void main(String[] args) {
        new Exercise();
    }
}

結果は次のとおりです。

間隔なしの結果

私のコードにはいくつかの懸念があります。まず、インセットを負にしなければならない理由がわかりません。Oracle のチュートリアルによると、「デフォルトでは、各コンポーネントには外部パディングがありません。」したがって、デフォルトではスペースがあってはいけませんか? 負のインセットがない場合、結果は次のようになります。

負のインセットを設定しない場合の結果

第二に、「オン」に切り替えた状態で青に変わるのではなく、トグルボタンを暗くしたいと思います。Java Swing を使用してこれを行う簡単な方法はありますか? 最後に、一般的により良いアプローチはありますか? Eclipse がトグル ボタンを完全に接続されているように見せる方法を知りたいと思っています。

アップデート

BoxLayout を推奨どおりに使用してみました。残念ながら、これで問題が解決したようには見えませんでした。結果は上の写真とほぼ同じです。変更されたコンストラクターは次のとおりです。

Exercise() {
    final JPanel topPanel = new JPanel();
    topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.X_AXIS));
    final ButtonGroup topButtonGroup = new ButtonGroup();
    for (String buttonName : buttonNames) {
        JToggleButton tabButton = new JToggleButton(buttonName);
    //    tabButton.setBorder(BorderFactory.createBevelBorder(
    //              BevelBorder.RAISED, Color.LIGHT_GRAY, Color.DARK_GRAY));
        topButtonGroup.add(tabButton);
        topPanel.add(tabButton);
    }
    this.add(topPanel);
    this.setVisible(true);
    this.pack();
}

興味深いことに、上でコメントアウトされているように境界線を追加しようとすると、ボタン間の余分なスペースが何とか消えました. 結果は以下のとおりです。

BoxLayout あり

可能な限り、ボタンの全体的な外観を以前と同じに保ちたいと思いますが、トグル ボタンがより接続されているように見えるように、エッジをより長方形にします。

4

2 に答える 2

5

BoxLayout のようなレイアウトを使用して、スペースをなくすことができます。GridBagLayout だけがレイアウトではありません。推奨される読書: http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

setBorder() や setBackground() などの JButton 関数を呼び出して、言及した効果を実現することもできます。いつものように、API はあなたの親友です: http://docs.oracle.com/javase/7/docs/api/

于 2014-01-23T14:01:02.283 に答える