我正在使用JTabbedPane。在这我必须禁用一些标签。我使用setEnabledAt(index,false)方法禁用选项卡。该选项卡实际上已被禁用,但我没有感觉[禁用选项卡文本的颜色变成浅色]。我如何纠正它?禁用Jtabbedpane中的选项卡时,该选项卡的外观没有变化
首先我使用默认的外观和感觉的java的...现在我改变它的外表和感觉灵气..我发现颜色变化,但残疾人选项卡并没有像禁用复选框或单选按钮或其他零件 。
我正在使用JTabbedPane。在这我必须禁用一些标签。我使用setEnabledAt(index,false)方法禁用选项卡。该选项卡实际上已被禁用,但我没有感觉[禁用选项卡文本的颜色变成浅色]。我如何纠正它?禁用Jtabbedpane中的选项卡时,该选项卡的外观没有变化
首先我使用默认的外观和感觉的java的...现在我改变它的外表和感觉灵气..我发现颜色变化,但残疾人选项卡并没有像禁用复选框或单选按钮或其他零件 。
我不知道应该是LookAndFeel的改变,但使用UIManager.put,你可以改变非常特殊部分的LookAndFeel,我敢打赌通过手动改变外观/感觉一个禁用的选项卡,你可能能够得到你想要的。
你可以看一下这个页面的一点帮助,以及所有看的链接/感觉选项 http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/color.html
为JTabbedPan
Ë大多数方法是受保护的API中,而不是入店从Swing methods
必须寻找Custom XxxTabbedPaneUI
,覆盖这些方法,并且可以入店从外面
正确的方法是实行Custom Look & Feel only,其中一部分覆盖JTabbedPane
与protected methods
太
你可以改变Foreground
为残疾人选项卡很容易,但只有通过使用HTML语法
代码
tabbedPane.setTitleAt(2, "<html><font color="
+ (tabbedPane.isEnabledAt(int tab) ? "black" : "red") + ">"
+ tabbedPane.getTitleAt(int tab) + "</font></html>");
Look and Feel
或简单的使用HTML
也许你有一个自己的制表组件来改变Foreground
?
然后,您必须将启用状态委托给此组件。
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
public class Display extends JFrame {
public Display() {
super("Enable");
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(new Dimension(300,300));
this.setLocationRelativeTo(null);
JTabbedPane tabs = new JTabbedPane() {
// delegating to tabComponent
@Override
public void setEnabledAt(int index, boolean enabled) {
super.setEnabledAt(index, enabled);
Component tabComponent = getTabComponentAt(index);
if(tabComponent != null) {
getTabComponentAt(index).setEnabled(enabled);
}
}
};
JComponent component = new JLabel("Lorem");
tabs.addTab("", component);
JLabel custom = new JLabel("disabled");
tabs.setTabComponentAt(tabs.indexOfComponent(component), custom);
tabs.addTab("enabled", new JLabel("Ipsum"));
tabs.addTab("disabled", new JLabel("Dolor"));
tabs.addTab("enabled", new JLabel("Sit"));
tabs.addTab("enabled", new JLabel("Amet"));
tabs.setEnabledAt(0, false);
tabs.setEnabledAt(2, false);
tabs.setSelectedIndex(1);
this.getContentPane().add(tabs);
}
public static void main(String[] args) throws Exception {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Windows".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Display().setVisible(true);
}
});
}
}
好主意 – mKorbel 2012-08-02 14:45:24
我相信你真的想是禁用禁用选项卡上的所有成分是什么?
摇摆不工作的setEnabled那个)父组件的方式(对孩子组件的任何影响 - 你需要他们自己的每一个调用的setEnabled(假)(毕竟你可能希望启用其中的一些,所以Swing不做任何假设,并将其完全交给你)。
你使用哪种LaF? – oliholz 2012-08-02 14:00:20