You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TornadoFX中TabPane左侧布局时标签旋转与样式转换求助

Hey there! Let's work through getting those left-side TabPane tabs rotated and properly aligned in TornadoFX—here's a step-by-step solution that covers all your requirements:

Rotated Left-Side Tabs in TornadoFX: Full Solution

When you set a TabPane's Side to LEFT, the default tab layout doesn't rotate the labels, which looks awkward. Let's fix that, convert your CSS to TornadoFX-native code, and get everything aligned neatly.

1. Translate Your CSS to TornadoFX Style DSL

Instead of writing raw CSS, we can use TornadoFX's type-safe style system to apply your desired styles and extend them for proper rotation. Here's a complete view example:

class LeftRotatedTabsView : View("Left Rotated Tabs Demo") {
    override val root = tabpane {
        side = Side.LEFT
        
        // Define styles directly in the view
        stylesheet {
            tabPane {
                // Target the tab container (matches your .tab-container CSS)
                tabContainer {
                    backgroundColor += Color.TRANSPARENT
                    rotate = 90.0 // Rotate the entire tab bar 90 degrees
                    
                    // Fix tab label readability and alignment
                    tabLabel {
                        rotate = -90.0 // Reverse-rotate text to make it readable
                        alignment = Pos.CENTER
                        padding = box(10.px) // Add space around text
                        fontSize = 12.px // Optional: Adjust text size for fit
                    }
                }
                
                // Style the content area to match your app's theme
                tabContentArea {
                    backgroundColor += Color.WHITE
                }
            }
        }
        
        // Add sample tabs to test
        tab("Home") {
            vbox(10) {
                label("Welcome to the Home Tab!")
                button("Click Me")
            }
        }
        tab("Settings") {
            label("Adjust your settings here")
        }
        tab("Longer Tab Name") {
            label("This tab has a longer label to test alignment")
        }
    }
}

2. Key Details Explained

  • Tab Container Rotation: Rotating the tabContainer 90 degrees makes the tabs stack vertically on the left side, which is what you want when Side is LEFT.
  • Text Readability: Without reversing the label rotation, text would be sideways. Setting rotate = -90.0 on tabLabel fixes this so text reads top-to-bottom.
  • Alignment: alignment = Pos.CENTER ensures text stays centered in each tab, and padding prevents it from touching the tab edges.
  • Transparent Background: backgroundColor += Color.TRANSPARENT implements your original CSS requirement to remove the default tab container background.

3. Alternative: Inline Styles for Quick Tweaks

If you prefer to apply styles inline (great for testing small changes), you can do this instead of using a stylesheet block:

tabpane {
    side = Side.LEFT
    inlineStyle("-fx-tab-min-width: 90px; -fx-tab-max-width: 90px;") // Enforce consistent tab width
    
    // Apply styles to the tab container
    tabContainer.style {
        backgroundColor = Color.TRANSPARENT
        rotate = 90.0
    }
    
    // Replace default tab text with rotated labels
    tabs.forEach { tab ->
        val tabText = tab.text
        tab.text = "" // Hide original text
        tab.graphic = label(tabText) {
            rotate = -90.0
            alignment = Pos.CENTER
            padding = box(8.px)
        }
    }
    
    // Add tabs as usual
    tab("Home") { /* content */ }
    tab("Settings") { /* content */ }
}

This approach gives you direct control over individual tab graphics, which is useful if you need custom icons alongside rotated text.

4. Pro Tips for Perfect Alignment

  • Consistent Tab Width: Use -fx-tab-min-width and -fx-tab-max-width to make all tabs the same width—this keeps the left side looking clean.
  • Test with Long Labels: Make sure longer tab names don't get cut off by adjusting padding or font size.
  • Adjust Rotation Origin: If tabs feel misaligned, you can set rotateOriginX and rotateOriginY on the tab container to fine-tune the rotation point.

内容的提问来源于stack exchange,提问作者Siva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:37:30