2011-03-03 19 views
5

Vorrei sapere come rimuovere i margini tra il mio JtabbedPane e il mio riquadro del contenuto JFrame e tra il mio JTabbedPane e il suo JPanel interno. Ho cerchiato i margini che voglio rimuovere. la linea verde è qui per mostrare il divario tra il jpanel all'interno del jtabbedpane.Java: rimuovere margine/riempimento su un JTabbedPane

Ho provato a guardare un metodo chiamato setMargin ma non esiste su un JTabbedPane. Ho anche controllato lo Hgap e Vgap (entrambi = 0) sul diverso layout (riquadro del contenuto principale, mio ​​jpanel, ecc.).

Quindi qualsiasi suggerimento è benvenuto. Grazie.

The image is here. Non riesco ancora a pubblicare immagini.

+0

avete un esempio dal vivo? se lo hai, inviaci un link e posso risolvere il tuo problema css. – bluefoot

+0

JAVA ...e c'è un collegamento – florian

risposta

7

Spetta all'aspetto e all'aspetto decidere quanto spazio è racchiuso tra i componenti all'interno di un riquadro a schede - generalmente lo farà in base a qualsiasi impostazione predefinita per il desktop. JTabbedPane non ha metodi per impostare gli inserti attorno ai componenti interni.

È possibile impostato questo a livello globale per tutti i riquadri a schede (avvertenza: Impianti su MetalLookAndFeel, sarà probabilmente lavoro per Windows L & F così, probabilmente sarà non lavoro per GTK o Nimbus aspetto grafico che non sono basati su BasicLookAndFeel). Questo cambierà l'aspetto di tutti i riquadri a schede nella VM:

UIManager.getDefaults().put("TabbedPane.contentBorderInsets", new Insets(0,0,0,0)); 
UIManager.getDefaults().put("TabbedPane.tabsOverlapBorder", true); 

Probabilmente anche voler assicurarsi che il JTabbedPane ha un EmptyBorder (0,0,0,0) e così fanno i componenti che si mettono dentro.

Se questo non funziona sul desktop di destinazione, le alternative sono

  • se non vi preoccupate per i vostri riquadri a schede cercando diversa dall'applicazione nativa schede riquadri, il (sgradevole) alternativa è quella di scrivere il proprio TabbedPaneUI
  • impostato il delegato UI per il singolo JTabbedPane si vuole apparire come questo per MetalTabbedPaneUI o qualche altro delegato UI che fa rispondere a queste proprietà
+0

Grazie. La tua soluzione mi aiuta a liberarmi dello spazio bianco superiore. – florian

1

I margini vengono aggiunti impostando i bordi sugli elementi dell'interfaccia utente. Dai un'occhiata alle impostazioni del bordo del tuo JTabbedPane.

+0

Grazie per la tua risposta, posso rimuovere il confine inserendo valori negativi per le proprietà "right" e "bottom". Penso che sia un po 'strano farlo. – florian

4

Ho appena colpito lo stesso problema, e niente chiunque altro ha detto sembrava essere una soluzione completa, così mi si avvicinò con questo:

import javax.swing.plaf.basic.BasicTabbedPaneUI; 

    tabbedPane.setUI(new BasicTabbedPaneUI() { 
     private final Insets borderInsets = new Insets(0, 0, 0, 0); 
     @Override 
     protected void paintContentBorder(Graphics g, int tabPlacement, int selectedIndex) { 
     } 
     @Override 
     protected Insets getContentBorderInsets(int tabPlacement) { 
      return borderInsets; 
     } 
    }); 

Funziona lo stesso senza l'override del metodo paintContentBorder, però così facendo rende probabilmente la Interfaccia utente leggermente più efficiente durante le ridimensionamenti o simili, in quanto la versione standard sembra delegare a un certo numero di altri metodi.

Testato su Oracle Java 6 U43 per Linux in WindowMaker, Mac OS X 10.6.7 con Mac Java 6 U37 e Windows 7 con Java 7 U07, speriamo che questo aiuta qualcuno :-)

+0

Mentre questo funziona per rimuovere il bordo, cambia anche l'interfaccia utente nelle schede attuali. –

Problemi correlati