2011-06-26 6 views
1

JTabbedPaneでタブタイトルのスタイルを書式設定する方法がありません。Groovy SwingBuilder:JTabbedPaneのタブタイトルのスタイルを制御する

タブペインの背景色を変更することはできますが(下記参照)、タブのタイトルのスタイルを変更する方法はありません。私はそれらを太字または赤色にするか、タブの幅を定義することができます。たとえば、最初のパネルでラベルのスタイルをフォーマットすることができます。

ここでは、主にtim_yates(Groovy SwingBuilder : using a scrollpanel to show a list of panels)に触発されたコード、です:

import groovy.swing.SwingBuilder 
import javax.swing.WindowConstants as WC 
import javax.swing.JOptionPane 
import javax.swing.JTabbedPane 
import javax.swing.JScrollPane 
import javax.swing.BoxLayout as BXL 
import java.awt.Font 

Font font = new Font("Serif", Font.BOLD, 13) 
int numPanels = 20 

swing = new SwingBuilder() 
frame = swing.frame(title:'test', pack:true, visible:true, defaultCloseOperation:WC.DISPOSE_ON_CLOSE) { 
    tabbedPane(id: 'tabs', tabLayoutPolicy:JTabbedPane.SCROLL_TAB_LAYOUT) { 
     panel(name: 'Tab 1', background:java.awt.Color.WHITE) { 
      boxLayout(axis: BXL.Y_AXIS) 
      panel(alignmentX: 0f, background:java.awt.Color.WHITE){ 
       label ('Label 1', preferredSize: [104, 24]).setFont(font) 
       label ('Label 2', preferredSize: [104, 24]).setFont(font) 
       label ('Label 3', preferredSize: [104, 24]).setFont(font) 
      } 
      scrollPane(verticalScrollBarPolicy:JScrollPane.VERTICAL_SCROLLBAR_ALWAYS) { 
       vbox(){ 
        (1..numPanels).each { num -> 
         def panelID = "panel$num" 
         def pane = panel(alignmentX:0f, id:panelID, background:java.awt.Color.GREEN) { 
          label('description') 
          textField(id: "description$num", text:panelID, columns: 70) 
          button(id: "buttonpanel$num", text:panelID, actionPerformed:{ 
          swing."$panelID".background = java.awt.Color.RED 
          }) 
         } 
        } 
       } 
      } 
     }  
     panel(name: 'Tab 2', background:java.awt.Color.WHITE) { 
      textField(text: 'Some text', columns: 15) 
      scrollPane() { 
       textArea(text: 'Some text', columns: 15, rows: 4) 
      } 
     }  
    } 
    boxLayout(axis: BXL.Y_AXIS) 
    panel(id:'secondPanel', background:java.awt.Color.WHITE){      
     button('Quit', actionPerformed:{ 
     dispose() 
     }) 
    } 
} 
frame.size = [ frame.width, 600 ] 

私は(私には)非常に困難に見えるこれらのリンクはGroovyで実装することが見つかりました:

また、Javaのドキュメントは、それを行う方法を説明していない、と私はスタイルのタブを使用して、任意の例を見つけることができませんでした。

ありがとうございました。

ありがとう、

Michel。

PSは:Antのは興味深い記事へのリンク

Groovy SwingBuilder : changing size and/or font of tabs (in jTabbedpane)

を提供しますが、(最初はあまりにも漠然とした)私の質問のために直接役立ちません。

私はあなたが( javadoc for which can be found herejtabbedpane.setTabComponentAtを呼び出す必要があると考えてい

答えて

2

これは、あなたが(Java 5のために、カスタムTabbedPaneUIクラスを書くに見えるしているつもり、これをオーバーライドしているのJava 6を使用することが必要です - または)これを可能にするいくつかの他のソースから

をカスタムJTabbedPaneのクラスを使用ここでアクションでの例です:

import groovy.swing.SwingBuilder 
import javax.swing.WindowConstants as WC 
import javax.swing.JOptionPane 
import javax.swing.JTabbedPane 
import javax.swing.JScrollPane 
import javax.swing.BoxLayout as BXL 
import java.awt.Font 

Font font = new Font("Serif", Font.BOLD, 13) 
int numPanels = 20 

swing = new SwingBuilder() 

frame = swing.frame(title:'test', pack:true, visible:true, defaultCloseOperation:WC.DISPOSE_ON_CLOSE) { 
    vbox { 
     tabbedPane(id: 'tabs', tabLayoutPolicy:JTabbedPane.SCROLL_TAB_LAYOUT) { 
      panel(name:'Tab 1', background:java.awt.Color.WHITE) { 
       vbox { 
        panel(background:java.awt.Color.WHITE){ 
         label ('Label 1', preferredSize: [104, 24]).setFont(font) 
         label ('Label 2', preferredSize: [104, 24]).setFont(font) 
         label ('Label 3', preferredSize: [104, 24]).setFont(font) 
        } 
        scrollPane(verticalScrollBarPolicy:JScrollPane.VERTICAL_SCROLLBAR_ALWAYS) { 
         vbox { 
          (1..numPanels).each { num -> 
           def panelID = "panel$num" 
           def pane = panel(alignmentX:0f, id:panelID, background:java.awt.Color.GREEN) { 
            label('description') 
            textField(id: "description$num", text:panelID, columns: 70) 
            button(id: "buttonpanel$num", text:panelID, actionPerformed:{ 
             swing."$panelID".background = java.awt.Color.RED 
            }) 
           } 
          } 
         } 
        } 
       } 
      }  
      panel(name: 'Tab 2', background:java.awt.Color.WHITE) { 
       textField(text: 'Some text', columns: 15) 
       scrollPane() { 
        textArea(text: 'Some text', columns: 15, rows: 4) 
       } 
      }  
     } 
     panel(id:'secondPanel', background:java.awt.Color.WHITE){      
      button('Quit', actionPerformed:{ 
       dispose() 
      }) 
     } 
    } 
} 

// Define a list of labels for our tabs 
def tabComponents = [ 
    swing.label(text:'Tab 1', font:font.deriveFont(Font.ITALIC)), 
    swing.label(text:'Tab 2', font:font.deriveFont(20.0f)) 
] 
// Set the tab componets to our labels 
tabComponents.eachWithIndex { lbl, idx -> 
    swing.tabs.setTabComponentAt idx, lbl 
} 

frame.size = [ frame.width, 600 ] 

PS:あなたは私あなたのother questionを削除する場合があります一般的に、追加情報を含む質問を編集することは、新しい質問を投稿するよりも、同じことを求めるが、より多くの情報を得ることがより良い。

+0

tyvm、tim!ちょうど私が探していたもの。 –

+0

その間、私はこのソリューションを試していました:フォントスタイルを設定するために正しく動作するtabbedPane(){} .setFont(font)ですが、幅や色をカスタマイズするためにフォントを拡張できませんでした –

+0

あなたのソリューションはより柔軟です:def tabComponents = [ (テキスト: 'Tab 1'、font:font.deriveFont(Font.ITALIC)、foreground:java.awt.Color.RED、preferredSize:[104、24])、 swing.labelあなたのPSに関連する –

関連する問題