2017-04-19 59 views
0

我想創建一個jframe並設置一個背景顏色,但也放入一個拉繩。這似乎是每當我使用.add時,文本出現,但不是背景。如果沒有.add,背景會更改,但不會顯示文本。 `如何設置背景顏色和drawString而不取消Java中的其他顏色?

import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
public class Test extends JPanel{ 
    public void paint(Graphics g){ 
     Graphics2D g2d=(Graphics2D)g; 
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 
     Font font = new Font("Serif", Font.PLAIN, 500); 
     g.setFont(font); 
     g.setColor(Color.red); 
     g.drawString("Hello", 300, 900); 
     }public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     JFrame jf=new JFrame(); 
     jf.getContentPane().setBackground(Color.YELLOW); 
     jf.getContentPane().add(new Test()); 
     jf.setSize(1920,1024); 
     jf.setVisible(true); 
     jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 

`

+0

在Test類上調用'setOpaque(false)'t o使其透明 – MadProgrammer

+0

不要在面板上調用setOpaque(false)。沒有理由這樣做,它會降低繪畫的效率。只需設置面板的背景並通過重寫'paintComponent(...)'並調用'super.paintComponent(...)'在面板上進行適當的繪製。 – camickr

+0

閱讀[自定義繪畫]的Swing教程部分(http://docs.oracle.com/javase/tutorial/uiswing/painting/index.html)以獲取更多信息和可下載的工作示例。演示代碼將有一個更好的程序結構供您遵循。該教程還包含其他基本的Swing信息和示例。 – camickr

回答

2

有你可以做到這一點的幾種方法...

你可以..

充分利用Test面板框架的內容面板。 ..

JFrame jf = new JFrame(); 
jf.setContentPane(new Test()); 
jf.getContentPane().setBackground(Color.YELLOW); 
jf.setSize(1920, 1024); 
jf.setVisible(true); 
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

你可以......

充分利用Test面板透明

JFrame jf = new JFrame(); 
Test test = new Test(); 
test.setOpaque(false); 
jf.getContentPane().setBackground(Color.YELLOW); 
jf.add(test); 
jf.setSize(1920, 1024); 
jf.setVisible(true); 
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

你可以...

只需設置Test面板的背景顏色

JFrame jf = new JFrame(); 
Test test = new Test(); 
test.setBackground(Color.YELLOW); 
jf.add(test); 
jf.setSize(1920, 1024); 
jf.setVisible(true); 
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

無論哪個你...

您應該...

  • 調用paint方法
  • 更喜歡paintpaintComponentsuper方法 - 它只是安全很多
  • 只有操縱從事件調度THEAD

例如上下文中的UI ...

import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class Test extends JPanel { 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     Font font = new Font("Serif", Font.PLAIN, 500); 
     g.setFont(font); 
     g.setColor(Color.red); 
     g.drawString("Hello", 300, 900); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame jf = new JFrame(); 
       jf.setContentPane(new Test()); 
       jf.getContentPane().setBackground(Color.YELLOW); 
       jf.setSize(1920, 1024); 
       jf.setVisible(true); 
       jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      } 
     }); 
    } 
} 
2

設置測試JPanel的背景色, JFrame中。

另外:

  • 重寫paintComponent,油漆
  • 不要忘了打電話給你的覆蓋範圍內的超級繪畫方法
  • 瞭解並遵循Java命名和編碼格式約定。您的代碼很難閱讀和理解,因爲它是目前編寫的。

例如:

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Test3 { 
    public static void main(String[] args) { 
     JFrame jf = new JFrame(); 
     jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jf.getContentPane().add(new MyTest("Hello", Color.RED)); 
     jf.pack(); 
     jf.setLocationRelativeTo(null); 
     jf.setVisible(true); 
    } 
} 

class MyTest extends JPanel { 
    private static final int PREF_W = 1600; 
    private static final int PREF_H = 900; 
    private static final Color BG = Color.YELLOW; 
    private static final Font FONT = new Font("Serif", Font.PLAIN, 500);; 
    private String text; 
    private Color color; 

    MyTest(String text, Color color) { 
     this.text = text; 
     setBackground(BG); 
     this.color = color; 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2 = (Graphics2D) g; 
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 
     g.setFont(FONT); 
     g.setColor(color); 
     g.drawString("Hello", 300, 600); 

    } 

    @Override 
    public Dimension getPreferredSize() { 
     if (isPreferredSizeSet()) { 
      return super.getPreferredSize(); 
     } 
     return new Dimension(PREF_W, PREF_H); 
    } 

}