如何解决Java Swing JXTaskPane:如何设置背景和边框?
| 我编写了以下示例代码: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));
return taskpanecontainer;
}
}
}
我需要做两件事:
如何更改标题的bgcolor?我认为可以通过taskpane2.setUI(..)
选项完成操作,但是我没有运气。
如何将JXTaskPane
和Jpanel
之间的边界设置为零?
解决方法
要更改标题的bgcolour,可以尝试在UIManager中设置开始和结束背景渐变颜色:
UIManager.put(\"TaskPane.titleBackgroundGradientStart\",Colors.White.color());
UIManager.put(\"TaskPane.titleBackgroundGradientEnd\",Color.GREEN);
我还为此找到了一个打开的swingx jira任务:SWINGX-731支持将颜色定义为JXTaskPane标头。
,最初,JXTaskPane被设计为一种“固定属性”组件-它的外观应与相应的本机组件(WinXP当时的样子)完全相同:自定义外观不被支持。结果,标题/边框的实现深深地隐藏在XXTaskPaneUI中-实际上,一切都归结为边框。
1)如前所述,某些属性可以根据每个应用程序进行更改。请当心:这些都是可能会更改或不受具体ui实施支持的实施细节(Nimbus始终是不尊重它们的理想人选,即使我们的非真正实现可能也不会忘记)
2)\“ gap \”是contentPane的边框,您可以设置自己的边框。再次提防:updateUI可能无法生存(可能是ui委托无条件地覆盖了它们,如果是,请在SwingX issuetracker中提交问题)
((JComponent) taskpane2.getContentPane()).setBorder(BorderFactory.createEmptyBorder());
顺便说一句:那些panel.setSize完全不起作用-layoutManagers规则;-)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。