2016-01-08 38 views
0

我有一個JTextPanepane.setEditable(false)這迫使它有一個'灰色'的背景顏色。如何更改Java中不可編輯的JTextPane的背景顏色?

嘗試setBackground(Color.WHITE)(這不起作用)後,我試着環顧網絡尋找答案,但沒有設法找到一個。

任何人都可以幫助我在這一個嗎?

+1

能否請您發表[Runnable的示例](http://stackoverflow.com/help/mcve),我們可以複製粘貼,看到了同樣的像你一樣問題? – Frakcool

+0

我建議檢查[this](https://community.oracle.com/thread/1480217?start=0&tstart=0)鏈接。希望它會回答你的問題 – Jonah

+1

@Frakcool謝謝,我開始編寫一個可運行示例,並找到了解決此問題的答案。我有'pane.setOpaque(false)'這阻止了我更改窗格上的任何顏色。謝謝您的幫助。對不起,我還在學Java! – blueprintChris

回答

1

我發現它是什麼 - 這是因爲我有pane.setOpaque(false),我不能改變背景顏色沒有先刪除或改變它爲真。

setBackground(Color.white)改變了這個之後工作。

+1

背景顏色不同於表示組件殘疾的顏色,我以爲這是你最初想要的。 – SomeDude

+0

我相信'setEnabled'和'setEditable'是兩回事。我在詢問'setEditable'。如果我需要用'setEnabled(false)'修改組件的顏色,我會記住你的答案。謝謝 – blueprintChris

+0

好吧。沒有看到你使用setEditable。 – SomeDude

2

其實試試這個:

UIManager.put("TextPane.disabledBackground", Color.WHITE); 

我覺得應該是TextPane.disabledBackground,如果不嘗試:TextPane.inactiveBackground

更改文本回地面的顏色我相信:在窗格 嘗試setDisabledTextColor

+0

感謝您的輸入 - 但問題是,我是'pane.setOpqaue(false)'阻止我改變任何顏色。 – blueprintChris

1

注意,對於一些外觀和感覺像雨雲不尊重的背景屬性,你可以使用此代碼:

private static class Painter extends javax.swing.plaf.nimbus.AbstractRegionPainter { 
    private final Color color; 

    private Painter(Color color) { 
     this.color = color; 
    } 
    @Override 
    protected AbstractRegionPainter.PaintContext getPaintContext() { 
     return new AbstractRegionPainter.PaintContext(null, null, false); 
    } 

    @Override 
    protected void doPaint(Graphics2D g, JComponent c, 
      int width, int height, Object[] extendedCacheKeys) { 
     g.setColor(c.isEnabled() ? c.getBackground() : color); 
     g.fillRect(0, 0, width, height); 
    } 
} 

定義一個新的自定義畫家爲背景。對於雨雲,它適用於您的JTextPane jtp這樣:

 UIDefaults defaults = UIManager.getLookAndFeelDefaults(); 
     Painter painter = new Painter(color); 
     String key = "TextPane[Disabled].backgroundPainter"; 
     defaults.put(key, painter); 
     jtp.putClientProperty("Nimbus.Overrides", defaults); 
     jtp.putClientProperty("Nimbus.Overrides.InheritDefaults", false);