PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eigene / Andere Komponenten in JMenu "integrieren"



maceop
02-03-2003, 15:03
Hi,
ist es möglich andere Komponenten (wie eine JList,JComboBox...) als MenuItem zu verwenden ? wenn es möglich ist JRadioButtonMenuItem und JCheckBoxMenuItem (und JMenuItem) zu verwenden, müsste es eigentlich doch auch möglich sein das anders zu machen.

Hab vor kurzem ein Beispiel gesehen welches einen JSlider in einem PopUp zeigt, dadurch kam ich auf die Idee, leider versteh ich das Programm nicht ganz.

Hier ist mal der Code



// MenuElementExample.java
//

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;

public class MenuElementExample extends JPanel implements ActionListener,
PopupMenuListener, MouseListener {

public JPopupMenu popup;
SliderMenuItem slider;
int theValue = 0;

public MenuElementExample() {

popup = new JPopupMenu();
slider = new SliderMenuItem();

popup.add(slider);
popup.add(new JSeparator());

JMenuItem ticks = new JCheckBoxMenuItem("Slider Tick Marks");
JMenuItem labels = new JCheckBoxMenuItem("Slider Labels");
ticks.addActionListener(this);
labels.addActionListener(this);

popup.add(ticks);
popup.add(labels);
popup.addPopupMenuListener(this);

addMouseListener(this);
}

public void mousePressed(MouseEvent e) { popupCheck(e); }
public void mouseClicked(MouseEvent e) { popupCheck(e); }
public void mouseReleased(MouseEvent e) { popupCheck(e); }
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}

private void popupCheck(MouseEvent e) {
if (e.isPopupTrigger()) {
popup.show(this, e.getX(), e.getY());
}
}

public void popupMenuWillBecomeVisible(PopupMenuEvent e) { }

public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
theValue = slider.getValue();
System.out.println("The value is now " + theValue);
}

public void popupMenuCanceled(PopupMenuEvent e) {
System.out.println("Popup menu is hidden!");
}

public void actionPerformed(ActionEvent event) {
if (event.getActionCommand() == "Slider Tick Marks")
slider.setPaintTicks(!slider.getPaintTicks());
if (event.getActionCommand() == "Slider Labels")
slider.setPaintLabels(!slider.getPaintLabels());
}

public static void main(String s[]) {
JFrame frame = new JFrame("Menu Element Example");
frame.addWindowListener(new BasicWindowMonitor());
frame.setContentPane(new MenuElementExample());
frame.setSize(300, 300);
frame.setVisible(true);
}

class SliderMenuItem extends JSlider implements MenuElement {

public SliderMenuItem() {
setBorder(new CompoundBorder(new TitledBorder("Control"),
new EmptyBorder(10, 10, 10, 10)));

setMajorTickSpacing(20);
setMinorTickSpacing(10);
}

public void processMouseEvent(MouseEvent e, MenuElement path[],
MenuSelectionManager manager) {}

public void processKeyEvent(KeyEvent e, MenuElement path[],
MenuSelectionManager manager) {}

public void menuSelectionChanged(boolean isIncluded) {}

public MenuElement[] getSubElements() {return new MenuElement[0];}

public Component getComponent() {return this;}
}
}



Ich hab das ganze jetzt schon mit JList probiert anstatt JSlider , aber das führte zu Probs. btw. ich hab dabei lediglich extends JSlider durch extends JList ausgetauscht und einige JSlider methoden entfernt, z.B.

setMajorTickSpacing(20);
setMinorTickSpacing(10);

Es müsste also möglich sein, kann mir jemand das ganze mal erklären ?

mfg
maceop

--- edit: ---

wenn ihr es kompilieren und testen wollt, fehlt noch Basic.... , hier dessen Source



import java.awt.event.*;
import java.awt.Window;

public class BasicWindowMonitor extends WindowAdapter {

public void windowClosing(WindowEvent e) {
Window w = e.getWindow();
w.setVisible(false);
w.dispose();
System.exit(0);
}
}

anda_skoa
04-03-2003, 09:38
Darf man fragen, warum du eine List (!) in einem Menü brauchst?

Wäre es nicht besser, du machst für so komplexe Komponenten einen Dialog?

Ciao,
_

maceop
04-03-2003, 09:49
hi anda_skoa,
die JList sollte nur ein Beispiel sein, ich möchte nur wissen ob es prinzipiell möglich ist andere Swing-Komponenten in ein JMenu zu integrieren.

mfg
maceop

anda_skoa
04-03-2003, 10:52
Hmm, da kenn ich mich zuwenig aus.

Da der Slider geht, ist es vielleicht auf Komponenten eingeschränkt, die keine Container sind.

Was geht den bei der List nicht?
Kompiliert es nicht, doer wir nur nix angezeigt?

Ciao,
_

maceop
04-03-2003, 12:53
der source wird schon kompiliert, nach dem ich die slider-methoden entferne, allerdigns wird nichts angezeigt.

mfg
maceop

anda_skoa
04-03-2003, 16:08
Könnte sein, dass die JList keine Minimum Size hat und das Menu alle Teile mit der Minimum SIze darstellt.
Oder etwas in der Richtung.

Ciao,
_

maceop
04-03-2003, 16:17
ok danke, werd mal bisschen rumprobieren, ist ja auch nicht so wichtig, hat mich nur interessiert, weil ich oben das bsp. gesehen hab.

danke

mfg
maceop