私は現在、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();
}
興味深いことに、上でコメントアウトされているように境界線を追加しようとすると、ボタン間の余分なスペースが何とか消えました. 結果は以下のとおりです。
可能な限り、ボタンの全体的な外観を以前と同じに保ちたいと思いますが、トグル ボタンがより接続されているように見えるように、エッジをより長方形にします。