JmenuItems an 2 Stellen verwenden

Hallo,

Danke für die schnellen Antworten. Das mit den Actions habe ich noch nicht gemacht, aber ich schaue mir die Links morgen an. Sachde dass das son nicht geht. Mein Problem waren nicht die Actions, sondern das Handling wann welche Items sichtbar sind. Na mal sehen, vielleicht schreibe ich mir soetwas wie einen Manager dafür, der zwar unterschiedliche Items ausspuckt, aber ein und die selbe Logik hinter die jeweilig zusammengehörenden Items stehen lässt.

Du meintest Items sichtbar machen, da ist mir die ToolBar von OpenOffice und ähnlichen eingefallen.

Habe diese Idee dann einfach mal Ansatzweise implementiert.
Java:
import java.awt.*;

import java.util.LinkedList;



import javax.swing.*;

import javax.swing.event.ChangeEvent;

import javax.swing.event.ChangeListener;



public class JQToolBarDemo extends JFrame {



	private JQToolBar toolBar;



	private JButton b1, b2, b3, b4, b5;



	public JQToolBarDemo() {

		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		this.setLocationByPlatform(true);

		this.setAlwaysOnTop(true);



		this.add(this.createToolBar(), BorderLayout.NORTH);



		this.pack();

		this.setVisible(true);

	}



	public static void main(String[] args) {

		new JQToolBarDemo();

	}



	public Component createToolBar() {

		toolBar = new JQToolBar();



		b1 = new JButton("B__1");

		b2 = new JButton("B___2");

		b3 = new JButton("B_3");

		b4 = new JButton("B____4");

		b5 = new JButton("B5");



		toolBar.add(b1);

		toolBar.add(b2);

		toolBar.add(b3);

		toolBar.add(b4);

		toolBar.add(b5);



		toolBar.createCheckMenu(new String[] { "B1", "B2", "B3", "B4", "B5" });



		return toolBar;

	}



	class JQToolBar extends JToolBar {



		private JQToolBar _this = this;



		private LinkedList<JCheckBoxMenuItem> checkBoxList;



		private LinkedList<String> names;



		private LinkedList<Dimension> dims;



		public JQToolBar() {

			checkBoxList = new LinkedList<JCheckBoxMenuItem>();

			names = new LinkedList<String>();

			dims = new LinkedList<Dimension>();

		}



		public void createCheckMenu(String[] buttons) {



			for (int i = 0; i < buttons.length; i++) {

				names.add(buttons[i]);

			}



			JMenuBar menuBar = new JMenuBar();



			JMenu menu = new JMenu("*");



			Component[] comps = toolBar.getComponents();



			System.out.println(toolBar.getComponentCount());



			for (int i = 0; i < buttons.length; i++) {

				final JCheckBoxMenuItem checkBox;

				checkBox = new JCheckBoxMenuItem(buttons[i]);

				checkBox.setSelected(true);

				checkBoxList.add(checkBox);

				checkBox.addChangeListener(new ChangeListener() {

					public void stateChanged(ChangeEvent e) {

						int index = names.indexOf(checkBox.getText());

						JComponent comp = (JComponent) _this

								.getComponentAtIndex(index);



						if (checkBox.isSelected()) {

							comp.setMaximumSize(dims.get(index));

							comp.revalidate();

							comp.repaint();

							comp.updateUI();

							_this.revalidate();

							_this.repaint();

							_this.updateUI();

							

						} else {

							comp.setMaximumSize(new Dimension(0, 0));

							comp.updateUI();

							_this.updateUI();



						}

					}

				});

				menu.add(checkBox);



			}



			menuBar.add(menu);



			this.add(new JSeparator(JSeparator.VERTICAL));

			this.add(menuBar);



			for (int i = 0; i < checkBoxList.size(); i++) {

				dims.add(checkBoxList.get(i).getMaximumSize());

			}



			System.out.println(dims);

		}

	}

}


Vg Erdal
 
Zurück