2013-10-29 101 views
-1

你好我試圖做一個簡單的背景分成一半使用Jframe 我如何使背景移動和調整與我打開的窗口。Java Jframe背景幫助

import javax.swing.JFrame; 

public class Concert 
{ 
    public static void main(String[] args) 
    { 
     JFrame frame = new JFrame(); 
     frame.setSize(1000, 800); 
     frame.setTitle("Concert!"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     Concertbackground component = new Concertbackground(); 
     frame.add(component); 

     frame.setVisible(true); 
    } 
} 

背景:現在請忽略所有其他導入的東西。

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Rectangle; 
import java.awt.geom.Ellipse2D; 
import java.awt.geom.Line2D; 
import javax.swing.JComponent; 
import java.awt.GradientPaint; 

/* 
    component that draws the concert background 
*/ 
public class Concertbackground extends JComponent 
{ 
    public void paintComponent(Graphics g) 
    { 
     // Recover Graphics2D 
     Graphics2D g2 = (Graphics2D) g; 

     //Background Top 
     g2.setColor(Color.BLUE); 
     Rectangle backgroundTop = new Rectangle (0, 0, 1000, 400); 
     g2.fill(backgroundTop); 

     // Background bottom 
     g2.setColor(Color.GREEN); 
     Rectangle backgroundBottom = new Rectangle (0, 400, 1000, 800); 
     g2.fill(backgroundBottom); 

    } 

} 

回答

0

如何使背景移動,並與我打開的窗口中調整。

不硬編碼值。用途:

int width = getWidth(); 
int height = getHeight(); 

然後你可以畫頂部的整個寬度和0的高度,以高度/ 2

與底部將是全寬度與高度/ 2的高度高度。

此外,不要忘記爲此組件設置佈局管理器,以便您可以向其中添加其他組件。通常框架的主面板將使用BorderLayout。

0

首先,要小心,默認JComponent是透明的(這對於下一部分是非常重要的)。

其次,你應該打電話super.paintComponent以確保圖形上下文您要畫到了正在準備妥當......

第三,你不應該依賴於幻數...

例如...

public class Concertbackground extends JComponent 
{ 
    public void paintComponent(Graphics g) 
    { 

     super.paintComponent(g); 
     // Recover Graphics2D 
     Graphics2D g2 = (Graphics2D) g; 

     //Background Top 
     g2.setColor(Color.BLUE); 
     Rectangle backgroundTop = new Rectangle (0, 0, getWidth(), getHeight()/2); 
     g2.fill(backgroundTop); 

     // Background bottom 
     g2.setColor(Color.GREEN); 
     Rectangle backgroundBottom = new Rectangle (0, getHeight()/2, getWidth(), getHeight()/2); 
     g2.fill(backgroundBottom); 

    } 

} 

如果你的目的是要使用的組件爲框架的背景下,你應該考慮使用JFrame#setContentPane而不是將其添加到該幀的...