如何使用 setBorder 和 JFrame 在 Java 中为矩形添加边框

2023-12-28

我正在尝试添加边框Rectangle元素,由于某种原因它无法工作,是否与JFrame?我可以设置我的整个JFrame有边界,但找不到setBorder和我的矩形。这是我的代码:

package trivia;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Rectangle;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.border.Border;

@SuppressWarnings("serial")
public class Main extends JFrame{

boolean mainMenu = true;
static Color tan = Color.decode("#F4EBC3");
static Color darkGreen = Color.decode("#668284");
static Color buttonColor = Color.decode("#A2896B");
Rectangle header = new Rectangle(0, 0, 500, 100);
Rectangle body = new Rectangle(0, 100, 500, 400);
Rectangle start = new Rectangle(150, 150, 200, 40);

public Main() {
    setTitle("Trivia Game!");
    setSize(500, 500);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
}
@Override
public void paint(Graphics g) {
    Dimension d = this.getSize();
    Border blackline;

    blackline = BorderFactory.createLineBorder(Color.black);
    if(mainMenu = true){
        g.setColor(darkGreen);
        g.fillRect(header.x, header.y, header.width, header.height);
        g.setFont(new Font("Courier", Font.BOLD, 24));
        g.setColor(Color.BLACK);
        drawCenteredString("Trivia Game!", d.width, 125, g);
        g.setColor(tan);
        g.fillRect(body.x, body.y, body.width, body.height);
        g.setColor(buttonColor);
        g.fillRect(start.x, start.y, start.width, start.height);


    }
}
public void drawCenteredString(String s, int w, int h, Graphics g) {
    FontMetrics fm = g.getFontMetrics();
    int x = (w - fm.stringWidth(s)) / 2;
    int y = (fm.getAscent() + (h- (fm.getAscent() + fm.getDescent())) / 2);
    g.drawString(s, x, y);
}

public static void main(String[] args) {
    @SuppressWarnings("unused")
    Main m = new Main();
}

}

当我将其添加到我的paint功能:

start.setBorder(blackline);

它给了我错误:

The method setBorder(Border) is undefined for the type Rectangle

我不知道如何让它识别setBorder函数,有人能帮忙吗?非常感谢所有帮助!


  1. Rectangle没有setBorder方法,相反,设置颜色Graphics上下文使用Graphics#setColor(Color)并使用Graphics#drawRect(int, int, int, int) or Graphics2D#draw(Shape)
  2. 你正在破坏油漆链。绘制由一系列链接的方法调用组成,当正确调用时,会绘制当前组件及其子组件。通过不打电话super.paint你正在阻止这样做,并且可能会导致许多令人讨厌的副作用,而这些都不是你真正想要的......
  3. 你应该避免覆盖paint顶级容器,例如JFrame,出于多种原因;它们不是双缓冲的;框架顶部有一堆其他组件,可能会在其上绘画;相反,创建一个自定义组件,从类似的东西扩展JPanel并覆盖它paintComponent方法代替(确保您调用super.paintComponent第一的)...

See 在 AWT 和 Swing 中绘画 http://www.oracle.com/technetwork/java/painting-140037.html, 进行定制绘画 http://docs.oracle.com/javase/tutorial/uiswing/painting/ and 2D 图形 http://docs.oracle.com/javase/tutorial/2d/更多细节

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 setBorder 和 JFrame 在 Java 中为矩形添加边框 的相关文章

随机推荐