Java Swing JXTaskPane: как установить bg и границы? - PullRequest
2 голосов
/ 13 апреля 2011

Я написал следующий пример кода:

import org.jdesktop.swingx.*;
import javax.swing.*;
import java.awt.*;

public class TaskPaneExample{
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new TaskPaneExample();
            }});
        }

        public TaskPaneExample() {
            JFrame frame = new JFrame("TaskPane Example 1");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(doInit(), BorderLayout.CENTER);
            frame.setLocationRelativeTo(null);
            frame.pack();
            frame.setVisible(true);
        }

        private Component doInit() {
            JXTaskPaneContainer taskpanecontainer = new JXTaskPaneContainer();
            taskpanecontainer.setLayout(new VerticalLayout(2));

            final JXTaskPane taskpane1 = new JXTaskPane(){
                public void setCollapsed(boolean w){
                    super.setCollapsed(w);
                }};
            taskpane1.setTitle("First TaskPane");
            JPanel panel1 = new JPanel();
            panel1.setBackground(Color.red);
            panel1.setSize(100,100);
            taskpane1.add(panel1);
            taskpanecontainer.add(taskpane1);

            JXTaskPane taskpane2 = new JXTaskPane(){
                public void setCollapsed(boolean w){
                    super.setCollapsed(w);
                }};
            taskpane2.setTitle("My Tasks");
            JPanel panel2 = new JPanel();
            panel2.setBackground(Color.blue); 
            panel2.setSize(100,100);
            taskpane2.add(panel2);
            taskpanecontainer.add(taskpane2);
            taskpanecontainer.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));

            return taskpanecontainer;
        }
    }
}

Мне нужны две вещи:

  1. как мне изменить bgcolor заголовка? Я думаю, что это сделано с опцией taskpane2.setUI(..), но мне не повезло с ней работать.
  2. как установить границу между JXTaskPane и Jpanel на ноль?

Ответы [ 2 ]

3 голосов
/ 13 апреля 2011

Изначально JXTaskPane был спроектирован как своего рода компонент с фиксированными свойствами - он должен выглядеть точно так же, как соответствующий нативный компонент (тогда WinXP): пользовательский внешний вид не должен поддерживаться. Как следствие, реализация заголовка / границы глубоко скрыта в XXTaskPaneUI - фактически все сводится к границе.

1) как уже упоминалось, некоторые свойства могут быть изменены для каждого отдельного приложения. Только будьте осторожны: это детали реализации, которые могут меняться или не поддерживаться конкретными реализациями пользовательского интерфейса (Nimbus всегда является хорошим кандидатом, чтобы не уважать их, даже наша реализация, не являющаяся синтезатором, может и не забыть)

2) «разрыв» - это граница области контента, вы можете установить свою собственную. Опять же, будьте осторожны: может не пережить updateUI (может быть, что делегаты пользовательского интерфейса переопределяют их безоговорочно, если это так, пожалуйста, сообщите о проблеме в системный трекер SwingX)

((JComponent) taskpane2.getContentPane()).setBorder(BorderFactory.createEmptyBorder());

Кстати: эти panel.setSize не имеют абсолютно никакого эффекта - правило layoutManagers; -)

3 голосов
/ 13 апреля 2011

Чтобы изменить цвет заголовка, вы можете попробовать установить начальный и конечный цвета градиента фона в UIManager:

UIManager.put("TaskPane.titleBackgroundGradientStart", Colors.White.color());
UIManager.put("TaskPane.titleBackgroundGradientEnd", Color.GREEN);

Для этого я также нашел задание open swingx jira: Поддержка SWINGX-731 для определения цвета для заголовка JXTaskPane .

...