你好我试图用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 :(得分: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
而不是将其添加到框架中...