最近、多くのアプリケーションを書き直しましたが、書き直す前に、達成しようとしていることは問題なく機能しました。JTabbedPane
でを介して、オンデマンドで非表示にしようとしてJCheckBoxMenuItem
いJMenuBar
ます。
以前に行ったことはまったく同じように見えましたが、今回は機能していません。私は使ってみましinvokeLater(...)
たが、役に立ちませんでした。
これが私が取り組んでいるものの基本的な例です:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
public class ToolkitFrame extends JFrame {
private static final long serialVersionUID = -6757985823719418526L;
public static void main(String[] args) {
new ToolkitFrame().construct();
}
private UtilityTabs utilityTabs;
public UtilityTabs getUtilityTabs() {
if (utilityTabs == null) {
utilityTabs = new UtilityTabs();
}
return new UtilityTabs();
}
public ToolkitFrame() {
super();
}
public void construct() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(getGameScreen(), BorderLayout.CENTER);
add(getUtilityTabs().getTabs(), BorderLayout.EAST);
setJMenuBar(getJMenuBar());
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public JMenuBar getJMenuBar() {
JMenuBar menuBar = new JMenuBar();
JMenu viewMenu = new JMenu("View");
final JCheckBoxMenuItem checkbox = new JCheckBoxMenuItem("Show Utilities");
checkbox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
getUtilityTabs().getTabs().setVisible(checkbox.isSelected());
System.out.println("Tabs should be: " + (checkbox.isSelected() ? "visible" : "hidden"));
}
});
checkbox.setSelected(true);
viewMenu.add(checkbox);
menuBar.add(viewMenu);
return menuBar;
}
public JPanel getGameScreen() {
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(765, 503));
panel.setBackground(Color.BLACK);
return panel;
}
class UtilityTabs {
private JTabbedPane tabs;
public JTabbedPane getTabs() {
return tabs;
}
private Tab tab;
public Tab getTab() {
if (tab == null) {
tab = new Tab();
}
return tab;
}
public UtilityTabs() {
tabs = new JTabbedPane(JTabbedPane.TOP);
tabs.setPreferredSize(new Dimension(275, 503));
tabs.add("FooBar", getTab());
tabs.setVisible(true);
}
class Tab extends JPanel {
private static final long serialVersionUID = 677183279827434278L;
private DefaultListModel<String> listModel;
private JList<String> list;
public Tab() {
construct();
}
public void construct() {
listModel = new DefaultListModel<String>();
for (String name : new String[] { "foo", "bar" }) {
listModel.addElement(name);
}
list = new JList<String>(listModel);
add(new JScrollPane(list));
}
}
}
}
誰かが私が間違っていることを教えてもらえますか?基本的に、ユーザーの設定に応じて(再起動せずに)ゲームのユーティリティを表示または非表示にします。
使用してsetVisible(false)
も表示されませんが、アプリケーションを再起動せずに実行したい場合は役に立ちません。