2014-10-03 55 views
-1

我正在製作一個窗口,其中有一個大的文本區域和一個小的文本區域。這是我到目前爲止有:JLabel和JTextArea不起作用

這是我有它的代碼:

JPanel window=new JPanel(){ 
    protected void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     ImageIcon ii=new ImageIcon("textEffect.png"); 
     Image i=ii.getImage(); 
     g.drawImage(i,0,0,null,this); 
    } 
}; 
JLabel label=new JLabel("Say: "); 
JTextArea dialog=new JTextArea(20,50); 
JTextArea input=new JTextArea(1,46); 
JScrollPane scroll=new JScrollPane(
    dialog, 
    JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
    JScrollPane.HORIZONTAL_SCROLLBAR_NEVER 
); 

//main method 
public static void main(String[] args){ 
    new Window(); 
} 
//Makes window and starts bot 
public Window(){ 
    super("Pollockoraptor"); 
    setSize(600,400); 
    setResizable(false); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    dialog.setEditable(false); 
    dialog.setOpaque(false); 
    dialog.setBackground(new Color(0, 0, 0, 0)); 
    dialog.setLineWrap(true); 
    input.addKeyListener(this); 
    label.setVerticalTextPosition(SwingConstants.BOTTOM); 
    label.setHorizontalTextPosition(SwingConstants.LEFT); 
    window.add(scroll); 
    window.add(label); 
    window.add(input); 
    window.setBackground(new Color(97,118,131)); 
    add(window); 
    setVisible(true); 
}' 

如何讓我大textarea的部分透明的,所以我可以看到背景,以及如何我是否將「說:」作爲小文字區的前面?

+1

我真的不禁首先沒有看到你的[mcve](http://stackoverflow.com/help/mcve),但有一些不相關的建議:1)不要像你那樣用paintComponent方法讀取圖像不必要地重新閱讀圖像並放慢必須絕對快速的方法。另外,2)永遠不要將KeyListener添加到文本組件中,我不關心Swing教程展示了這一點,這只是一個危險的事情,並且有更好的方法來捕獲文本組件中的輸入。3)您的佈局經理應該幫助您爲您定位組件。 – 2014-10-03 02:14:43

+1

哦,4)遵循MadProgrammer的建議,因爲他知道Swing向前和向後。 – 2014-10-03 02:16:55

+2

'JTextArea input = new JTextArea(1,46);'應該可能是'JTextField input = new JTextField(46);' – 2014-10-03 02:28:45

回答

4

JPanel默認使用FlowLayout。你會想改變佈局管理器,我個人建議像GridBagLayout這樣的東西,但這只是我。

更多細節

爲了使JTextArea識破,你將不得不作出JScrollPaneLaying Out Components Within a Container和它的JViewPort透明爲好。

Swing只知道如何繪製完全不透明或完全透明的組件。您可以通過使部件透明,並覆蓋它的paintComponent方法並使用AlphaComposite或用Color它有一個alpha值低於255

例如設置的東西畫創建一個半透明的效果......

而一般的意見...

  • Key BindingsKeyListener
  • 覆蓋getPreferredSize您的自定義組件,以獲得更好的結果時,已經奠定了
  • 使用JFrame#packsetSize,這將計算基於窗口大小關於內容的需求並考慮到窗框裝飾以及
+0

謝謝,我使用了GridBagLayout,並且完美地對齊了一切。我使JViewPort透明,並修復了我的背景問題。 – 2014-10-03 04:48:50

3

如何使textarea的較大部分透明的,所以我可以用一個透明背景,你可以用它來你一個通用的解決方案並不需要做的風俗畫時看到背景

退房Backgrounds With Transparency的問題每時每刻。