2012-01-23 4 views
4

Как видно из изображения ниже, текст Java является горизонтальным. То, что я хотел бы сделать, это получить вертикальную ориентацию заголовков JTabbedPane.Вертикальная ориентация заголовков JTabbedPane, когда расположение табуляции установлено на LEFT

Во время поиска в Интернете я обнаружил, что единственный способ - добавить дополнительную библиотеку. Но мне было интересно, можно ли это сделать без дополнительной библиотеки?

Я хотел бы для title1 и TITLE2 быть ориентирована вертикально, а не горизонтально

enter image description here

ответ

1

вы должны использовать синтаксис HTML, для каких-либо изменений в Таб инвалидов тоже

tabbedPane.addTab("<html>T<br>i<br>t<br>t<br>l<br>e<br>1</html>", panel1); 

EDIT

SSCCE на вопрос о формате HTML форматирования текста и выравнивания

import java.awt.Color; 
import java.awt.Component; 
import java.awt.Dimension; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTabbedPane; 
import javax.swing.JTextField; 

/** 
* 
* @author korbel 
*/ 
public class TestTabbedPane extends JFrame { 

    private static final long serialVersionUID = 1L; 
    private JTabbedPane tabbedPane; 

    public TestTabbedPane() { 
     tabbedPane = new JTabbedPane(); 
     tabbedPane.setPreferredSize(new Dimension(300, 200)); 
     getContentPane().add(tabbedPane); 
     JPanel panel = new JPanel(); 
     tabbedPane.add(panel, "null"); 
     JTextField one = new JTextField("one"); 
     tabbedPane.add(one, "one"); 
     JTextField two = new JTextField("two"); 
     tabbedPane.add(two, "<html> T<br>i<br>t<br>t<br>l<br>e <br> 1 </html>"); 
     tabbedPane.setEnabledAt(2, false); 
     /*int comp = tabbedPane.getComponentCount(); 
     for (Component sc : tabbedPane.getComponents()) { 
     if (sc instanceof javax.swing.JLabel) { 
     JLabel lbl = (JLabel) sc; 
     lbl.setForeground(Color.red); 
     } 
     if (sc instanceof javax.swing.JPanel) { 
     JPanel pnl = (JPanel) sc; 
     pnl.setName(pnl.getName()); 
     } 
     if (sc instanceof javax.swing.JTextField) { 
     JTextField txt = (JTextField) sc; 
     txt.setForeground(Color.blue); 
     txt.setDisabledTextColor(Color.red); 
     } 
     } 
     UIManager.put("TabbedPane.contentBorderInsets", new Insets(0, 0, 0, 0)); 
     UIManager.put("TabbedPane.highlight", new Color(255, 0, 0)); 
     UIManager.put("TabbedPane.lightHighlight", new Color(0, 255, 0)); 
     UIManager.put("TabbedPane.darkShadow", new Color(0, 255, 0)); 
     UIManager.put("TabbedPane.shadow",new Color(0, 0, 255)); 
     UIManager.put("TabbedPane.light" , new Color(0, 255, 0)); 
     UIManager.put("TabbedPane.foreground", new Color(0, 0, 0)); 
     UIManager.put("JTabbedPane.font", new Font("Dialog", Font.ITALIC, 12)); 
     UIManager.put("TabbedPane.selected", new Color(255, 0, 0)); 
     UIManager.put("disable", new Color(255, 0, 0)); 
     UIManager.put("TabbedPane.selectHighlight" , new Color(0, 0, 0)); 
     UIManager.put("TabbedPane.background", new Color(0, 0, 0)); 
     SwingUtilities.updateComponentTreeUI(tabbedPane);*/ 
     tabbedPane.setTitleAt(2, "<html><font color=" 
       + (tabbedPane.isEnabledAt(2) ? "black" : "red") + ">" 
       + tabbedPane.getTitleAt(2) + "</font></html>"); 
     tabbedPane.setTabPlacement(JTabbedPane.LEFT); 
    } 

    public static void main(String args[]) { 
     TestTabbedPane frame = new TestTabbedPane(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 
+0

Действительно ли он работает с отключенными вкладками? (Я имею в виду, как в рендеринге правильных цветов - 'JButton' не делает.) –

+0

@ Андрю Томпсон (-: BNI :-) Можете ли вы, ооооооочень немного конкретно, значит, вы хотите положить JButton в Tab, потому что я имел в виду только визуальные текстовые свойства, JTabbedPane был создан в год один-два, и до сих пор никто не обновлял те защищенные/частные методы, которые не доступны извне – mKorbel

+0

* «.. BNI ..» * LMAO :) –

9

Вы можете использовать JLabel с обычаем LabelUI, как описано в this answer, это дает результат я ожидал:

Vertical text on JTabbedPane

JTabbedPane tabPane = new JTabbedPane(JTabbedPane.LEFT); 

// Add tabs with no text 
tabPane.addTab(null, component1); 
tabPane.addTab(null, component2); 

// Create vertical labels to render tab titles 
JLabel labTab1 = new JLabel("Tab #1"); 
labTab1.setUI(new VerticalLabelUI(false)); // true/false to make it upwards/downwards 
tabPane.setTabComponentAt(0, labTab1); // For component1 

JLabel labTab2 = new JLabel("Tab #2"); 
labTab2.setUI(new VerticalLabelUI(false)); 
tabPane.setTabComponentAt(1, labTab2); // For component2 
1

Если вы используете WebLafLoolAndFeel Библиотека Существует компонент, называемый WebVerticalLabel, который может иметь вертикальный текст.

JTabbedPane .setTabComponentAt(1, new WebVerticalLabel("Title1")); 
Смежные вопросы