编程语言
首页 > 编程语言> > 如何在Java中创建一个带有连接按钮的ButtonGroup?

如何在Java中创建一个带有连接按钮的ButtonGroup?

作者:互联网

我目前正在尝试创建一组切换按钮,这些按钮类似于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’s tutorial,“[b] y默认情况下,每个组件都没有外部填充.”因此,默认情况下不应该没有空格吗?没有负面插图,结果如下所示:

其次,我希望切换按钮变暗而不是转为蓝色并切换为“打开”.有没有简单的方法通过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之类的布局来消除空间. GridBagLayout不是唯一的布局.推荐阅读:http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

您还可以调用JButton函数,如setBorder()和setBackground()来实现您提到的效果.一如既往,API是您最好的朋友:http://docs.oracle.com/javase/7/docs/api/

标签:gridbaglayout,java,layout,swing,jtogglebutton
来源: https://codeday.me/bug/20191008/1870037.html