Java Jframe后台帮助

时间:2013-10-29 23:24:01

标签: java jframe

你好我试图用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);

   }

}

2 个答案:

答案 0 :(得分:0)

  

如何使用我打开的窗口移动背景并进行调整。

不要硬编码值。使用:

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

然后,您可以将顶部绘制为整个宽度,高度从0到高度/ 2。

底部是全宽,高度从高度/ 2到高度。

此外,不要忘记为此组件设置布局管理器,以便您可以向其中添加其他组件。通常,框架的主面板将使用BorderLayout。

答案 1 :(得分: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而不是将其添加到框架中...