Hallo,
ich habe ein spezielles Problem und auch nach längerer Suche bei Google und auch hier im Forum keine Lösung finden können.
Deshalb nun meiner 1. Beitrag in diesem Forum.
Ich habe eine JTabbedPane. Dieser füge ich mit der Method addTab(String, Component) mehrere Tabs hinzu. Mit der Method setTabComponentAt(int, Component) setze ich für die Reiter ein eigenes Label.
Das funktioniert auch soweit.
Wenn ich jetzt für meinen eigenen Label einen MouseListener registriere, kommt anscheinend der Mausklick nicht mehr in dem darunter liegenden Container, in diesem Fall die JTabbedPane an.
Hier einmal der komplette Code:
Ich habe auch schon alles mögliche mit den SwingUtilities ausprobiert, bin dabei aber leider nicht auf die richtige Lösung gestoßen.
Ich möchte eine eigene Label-Klasse haben, die die Events einfach "durchlässt" bzw. "weiterleitet".
Wie kann ich soetwas realisieren? Kann mir dan jemand einen Tipp geben?
MFG Simon
ich habe ein spezielles Problem und auch nach längerer Suche bei Google und auch hier im Forum keine Lösung finden können.
Deshalb nun meiner 1. Beitrag in diesem Forum.
Ich habe eine JTabbedPane. Dieser füge ich mit der Method addTab(String, Component) mehrere Tabs hinzu. Mit der Method setTabComponentAt(int, Component) setze ich für die Reiter ein eigenes Label.
Java:
JTabbedPane lTabbedPane = new JTabbedPane(JTabbedPane.NORTH, JTabbedPane.WRAP_TAB_LAYOUT);
getContentPane().add(lTabbedPane);
lTabbedPane.addTab(null, createPanel("Panel one") );
lTabbedPane.setTabComponentAt(0, createLabel("one") );
lTabbedPane.addTab(null, createPanel("Panel two") );
lTabbedPane.setTabComponentAt(1, createLabelWithListener("two") );
Das funktioniert auch soweit.
Wenn ich jetzt für meinen eigenen Label einen MouseListener registriere, kommt anscheinend der Mausklick nicht mehr in dem darunter liegenden Container, in diesem Fall die JTabbedPane an.
Hier einmal der komplette Code:
Java:
public class TabbedPaneTest extends JFrame {
public static void main(String[] args) {
new TabbedPaneTest();
}
public TabbedPaneTest() {
super("TabbedPaneTest");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 100);
init();
setVisible(true);
}
private void init() {
JTabbedPane lTabbedPane = new JTabbedPane(JTabbedPane.NORTH, JTabbedPane.WRAP_TAB_LAYOUT);
getContentPane().add(lTabbedPane);
lTabbedPane.addTab(null, createPanel("Panel one") );
lTabbedPane.setTabComponentAt(0, createLabel("one") );
lTabbedPane.addTab(null, createPanel("Panel two") );
lTabbedPane.setTabComponentAt(1, createLabelWithListener("two") );
}
private JPanel createPanel(final String pPanelText) {
return new JPanel() {
public void paint(Graphics pGrp) {
pGrp.drawString(pPanelText, 50, 20);
}
};
}
private JLabel createLabel(String pText) {
JLabel lLabel = new JLabel(pText);
return lLabel;
}
private JLabel createLabelWithListener(String pText) {
JLabel lLabel = new JLabel(pText);
lLabel.addMouseListener( new MouseListener() {
public void mouseReleased(MouseEvent e) {
Component lContainer = ((Component)e.getSource()).getParent();
lContainer.dispatchEvent( SwingUtilities.convertMouseEvent((Component)e.getSource(), e, lContainer) );
}
public void mousePressed(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseClicked(MouseEvent e) { }
});
return lLabel;
}
}
Ich habe auch schon alles mögliche mit den SwingUtilities ausprobiert, bin dabei aber leider nicht auf die richtige Lösung gestoßen.
Ich möchte eine eigene Label-Klasse haben, die die Events einfach "durchlässt" bzw. "weiterleitet".
Wie kann ich soetwas realisieren? Kann mir dan jemand einen Tipp geben?
MFG Simon