1

JTabbedPane でタブ タイトルのスタイルをフォーマットする方法が見つかりません (何かありますか?)。

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

主に tim_yates ( Groovy SwingBuilder : scrollpanel を使用してパネルのリストを表示する)に触発されたコードを次に示します。

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 ドキュメントにはその方法が説明されておらず、スタイル付きタブを使用した例も見つかりませんでした。

ご協力いただきありがとうございます。

よろしく、

ミシェル。

PS : Ant からリンクが提供されました

Groovy SwingBuilder : タブのサイズやフォントの変更 (jTabbedpane 内)

興味深い記事ですが、私の質問には直接役立ちません(最初は漠然としていました)。

4

1 に答える 1

2

電話する必要があると思いますjtabbedpane.setTabComponentAtJavadocはここにあります

これには、Java 6 を使用する必要があります (Java 5 の場合は、カスタム TabbedPaneUI クラスを作成し、これをオーバーライドすることを検討する必要があります。または、これを可能にする他のソースからのカスタム 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: あなたは私が見つけた他の質問を削除したいと思うかもしれません.一般的に、質問を編集して追加情報を含めることは、同じことを尋ねる新しい質問を投稿するよりも優れていますが、より多くの情報が含まれています.

于 2011-06-27T09:18:58.347 に答える