-1

您好,我正在尝试使用 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);

   }

}
4

2 回答 2

0

如何使用打开的窗口移动和调整背景。

不要硬编码值。利用:

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

然后您可以将顶部绘制为全宽和从 0 到 height / 2 的高度。

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

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

于 2013-10-29T23:26:46.377 回答
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而不是将其添加到框架中...

于 2013-10-29T23:26:59.113 回答