JTabbedPane mit schliessen button

Alles zur oder um die NetBeans IDE

Moderator: arittner

JTabbedPane mit schliessen button

Beitragvon SamysSmile » 28.07.2010, 21:54

Hallo

Laut google ist das ganze etwas aufwendig da man mit swing keine Tabs mit close button direkt erstellen konnte.

Laut:
http://blogs.sun.com/geertjan/entry/netbeans_apis_add_close_button und
http://bits.netbeans.org/dev/javadoc/org-openide-awt/org/openide/awt/TabbedPaneFactory.html
ist es in Netbeans 6.9 no Problem.

Leider ist mir das nicht gelungen ( Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/openide/util/ImageUtilities) . Kann jemand dazu stellung nehmen? Wie erstellt man mit NB 6.9 JTabbedPane mit Close Button funktion.


Danke
Samy
SamysSmile
 
Beiträge: 7
Registriert: 30.06.2009, 08:44

Re: JTabbedPane mit schliessen button

Beitragvon Olek77 » 29.07.2010, 03:14

Hallo,

Die Klasse die du ansprichst ist org.openide.awt.TabbedPaneFactory

Dies ist eine Netbeans-Eigene IDE-Klasse. Das heißt du müsstest
an die Quell-Dateien von Netbeans gelangen um es nutzen zu können.

Mit 6.0 ist hier Netbeans 6.0 gemeint und nicht Java Rev. 6 ( eigentlich java 1.6 ).

Also wenn du an die Quellen deiner Netbeansplatform kommst und sie als jar-Datei/Bibliothek/Folder einbinden kannst
in dein Projekt dürfte dem Schließen des Tabs nichts mehr im Wege stehen.

Eine andere auch nicht schwere Lösung wäre es eine eigene JComponent als
Tab-Komponente zu übergeben:
Code: Alles auswählen
public void setTabComponentAt(int index,
                              Component component)

Aus der API:
"
Sets the component that is responsible for rendering the title for the specified tab. A null value means JTabbedPane will render the title and/or icon for the specified tab. A non-null value means the component will render the title and JTabbedPane will not render the title and/or icon.

Note: The component must not be one that the developer has already added to the tabbed pane.

Parameters:
index - the tab index where the component should be set
component - the component to render the title for the specified tab
"

Hier kannst du jede beliebige Komponente übergeben. Natürlich machen riesige Panels keinen Sinn aber
ein JLabel mit Icon und Text schon ( Text linksbündig, das Icon dann rechts z.B. und ein schönes 'close'-icon ).
Dann kannst du mit nem Mauslistener definieren was beim draufdrücken auf das Label passieren soll.
Den listener registrierst du bei dem JPanel und überschreibst
Code: Alles auswählen
public void mouseClicked( MouseEvent me ) {
    // if ( me.getClickCount() ... )
    // ...
    // tabIndex musst du natürlich wissen
    tabPane.remove( tabIndex );
}

// optional auch
public void mousePressed( MouseEvent me ) {
    // falls du auch schon beim nur drücken aber nicht
    // loslassen der Maus das Tab schließen möchtest
}

Wiedereinmal reicht ein Blick in die JavaDoc von Java und
ein Sprung zu JTabbedPane aus und Schwups
landen wir hier: http://download.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html

Wo auch sofort ein tabbed pane mit schließen button - in dem Fall - demonstriert wird.

Viele Grüße,

Olek
- Netbeans Certified Associate -
Benutzeravatar
Olek77
 
Beiträge: 136
Registriert: 21.03.2009, 15:09

Re: JTabbedPane mit schliessen button

Beitragvon SamysSmile » 29.07.2010, 05:57

Hallo

Das es NB 6.0 gemeint ist, is selbstverständlich.
Ich habe org.openide.awt.jar aus netbeans modulen eingebunden und importiert so das die TabbedpaneFactory zur verfügung stand, trotzdem klappte das nicht, deswegen fragte ich nach.
Also wenn du an die Quellen deiner Netbeansplatform kommst und sie als jar-Datei/Bibliothek/Folder einbinden kannst
in dein Projekt dürfte dem Schließen des Tabs nichts mehr im Wege stehen.


Genau das wollte ich etwas genau erklärt bekommen. Da ich Exceptions bekomme.

---------
Mit der super Funktion ganze Komponente in die Tabs einzubinden, habeich das schon hinbekommen. Ich will nur wissen wie man das auch mit NB selbst schaft, evt hilft das in der Zukunft andere Probleme zu lösen.


Samuel
SamysSmile
 
Beiträge: 7
Registriert: 30.06.2009, 08:44

Re: JTabbedPane mit schliessen button

Beitragvon arittner » 29.07.2010, 10:24

Moin!

Vollständige Exceptions sind sinnvoller, aber Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/openide/util/ImageUtilities ist doch recht eindeutig. Das eine jar reicht nicht, du benötigst noch org.openide.util - Es kann aber sein, dass die Abhängigkeiten noch weiter gehen. So weit, dass es keinen Sinn mehr macht eine eigene App zu basteln, sondern gleich die NetBeans Platform zu nutzen.

Beste Grüße,
Josch.
JNBB/BeanDev: Das deutsche Blog zur NetBeans Platform
Bild
Sun Certified Specialist for NetBeans IDE
Benutzeravatar
arittner
 
Beiträge: 2886
Registriert: 05.08.2008, 08:20
Wohnort: Südniedersachsen


Zurück zu NetBeans - IDE

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste