Java Swing JXTaskPane:如何设置背景和边框?

3
我已经编写了以下示例代码:
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. 如何改变标题的背景颜色?我认为可以通过 taskpane2.setUI(..) 选项来完成,但我尝试过没有成功。
  2. 如何将 JXTaskPaneJpanel 之间的边框设置为零?
2个回答

5

最初,JXTaskPane被设计为一种“固定属性”组件 - 它应该看起来与相应的本地组件(当时是WinXP)完全相同:不支持自定义外观。因此,标题/边框的实现深藏在XXTaskPaneUI中 - 实际上,所有内容都归结为边框。

1) 正如dogbane已经提到的,某些属性可以按应用程序基础更改。请注意:这些是可能会更改或不受具体UI实现支持的实现细节(Nimbus始终是不遵守它们的好候选人,即使我们不太合成的实现也可能不支持,忘记了)

2) “间隔”是contentPane的边框,您可以设置自己的边框。再次注意:可能无法在updateUI之后生存(如果ui代理无条件地覆盖它们,则可能会发生这种情况,请在SwingX问题跟踪器中提交问题)

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

顺便说一句,那些panel.setSize实际上没有任何效果 - 布局管理器才是王道。

@yaniv 很高兴我能帮到你 :-) 请不要忘记接受其中一个答案。 - kleopatra

3

要更改标题的背景颜色,您可以尝试在UIManager中设置起始和结束背景渐变颜色:

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

我还发现了一个开放的swingx jira任务: SWINGX-731 支持定义JXTaskPane头部的颜色.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接