Swing: トグル ボタンとボタン グループおよびメニュー項目のリンク
ツールバー ボタンとメニュー項目を備えた単純なペイント アプリケーションのコンテキスト形状が異なると、ツールバー ボタンを選択すると他のボタンの選択が解除され、対応するメニュー項目が選択されるようにする方法、またはその逆をどのように行うかという疑問が生じます。 versa.
ButtonGroup クラスはボタンの単一グループ内の選択を処理できますが、複数のグループを処理する場合には最適なソリューションではない可能性があります。さらに、メニューがボタンを変更する場合、またはその逆の場合は無限再帰のリスクが生じます。
より良いアプローチは、アクションを使用することです。アクション インターフェイスを使用すると、ボタンやメニュー項目などの複数のコンポーネントが同じ機能を実行できます。各グループに同じアクションを使用すると、ボタンの選択や形状の設定を手動で処理する必要がなく、一貫した動作を確保できます。
これを説明するために、次のコード スニペットは、JMenu と JMenu の間でアクションを共有する方法を示しています。最近のファイルを管理するための JToolBar:
import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.io.File; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JToolBar; public class FileMenu { public void create() { File userDir = new File(System.getProperty("user.dir")); File[] files = userDir.listFiles(); JMenu menu = new JMenu("Recent Files"); JToolBar toolBar = new JToolBar(JToolBar.VERTICAL); JLabel label = new JLabel(" ", JLabel.CENTER); for (File f : files) { if (f.isFile() && !f.isHidden()) { RecentFile rf = new RecentFile(f, label); menu.add(new JMenuItem(rf.getAction())); toolBar.add(rf.getAction()); } } JMenuBar menuBar = new JMenuBar(); menuBar.add(menu); JFrame f = new JFrame("FileMenu"); f.setJMenuBar(menuBar); f.add(toolBar, BorderLayout.CENTER); f.add(label, BorderLayout.SOUTH); f.pack(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLocationRelativeTo(null); f.setVisible(true); } class RecentFile extends AbstractAction { private final File file; private final JLabel label; public RecentFile(final File file, final JLabel label) { this.file = file; this.label = label; this.putValue(Action.NAME, file.getName()); this.putValue(Action.SHORT_DESCRIPTION, file.getAbsolutePath()); } public void actionPerformed(ActionEvent e) { label.setText(file.getName()); } public Action getAction() { return this; } } }
ツールバー ボタンとメニュー項目の両方に同じアクションを使用することで、ボタンの選択を解除するという目的の動作を実現できます。他のメニュー項目を選択し、対応するメニュー項目を選択します。またその逆も同様で、手動による処理や無限再帰のリスクはありません。
以上がSwing で JToolBar と JMenu の間でトグル ボタンの選択を同期するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。