java为什么我的背景在重新绘制后会出现问题?
我有一个我制作的程序选择工具。它打开一个包含17个按钮的JFrame,其中15个按钮是可自定义的,它们从一个窗口获取文本。txt文档位于C:驱动器中。当我单击assign按钮时,它会打开一个JFileChooser,以便在单击该按钮时选择要打开的文件。然后选择要更改的按钮,然后键入希望该按钮显示的文本。之后,程序将重写。txt文件并更新按钮。以下是更新代码:
public static void restart() {
start.assignButtonActions();
start.assignButtonText();
start.paint(graphics);
}
public void assignButtonActions() {
/**
* assign button actions
*/
for (int i = 0; i < buttonAction.length; i++) {
buttonAction[i] = io.readSpecificFromHD("C:\\ButtonActions.txt", i
+ 1 + actionButton.length);
}
}
public void assignButtonText() {
for (int i = 0; i < actionButton.length; i++) {
/**
* set button text
*/
actionButton[i].setText(io.readSpecificFromHD(
"C:\\ButtonActions.txt", i + 1));
}
}
public void paint(Graphics g) {
g.drawImage(getImage("files/background.png"), 0, 0, FRAMEWIDTH,
FRAMEHEIGHT, null);
refresh();
}
public void refresh() {
graphics.drawImage(getImage("files/background.png"), 0, 0, FRAMEWIDTH,
FRAMEHEIGHT, null);
for (int i = 0; i < actionButton.length; i++) {
actionButton[i].repaint();
}
assignButton.repaint();
helpButton.repaint();
}
我相信这就是这个问题所需要的全部代码。问题是,在调用方法restart()
之后,背景就在那里,按钮周围有一个白色的正方形,正方形内部是白色的。这不是什么大问题,但真的很烦人,很不专业。起初,我认为是在绘制背景后,按钮正在调整大小,所以我将其设置为每次调用刷新时运行两次。一点帮助也没有
编辑:
我解决了这个问题。我接受了气垫船的答案,并对我学到的稍加修改。我所要做的就是将restart()
方法修改为:
public static void restart() {
start.assignButtonActions();
start.assignButtonText();
start.repaint();
}
因为repaint();
重新绘制了气垫船所说的整个组件。谢谢大家!希望这对以后的问题有所帮助
# 1 楼答案
通过直接调用
paint(...)
并尝试在JComponent的paintComponent(...)
方法之外使用图形对象,您似乎在错误地处理Swing图形。不要这样做,因为所有的Swing图形教程都会告诉你(如果你还没有读过其中的一些教程,你很快就会想这么做)。相反,在JComponent(比如JPanel)中执行所有图形,首先调用super的方法,并在paintComponent的方法参数中使用JVM提供的graphics对象编辑
教程链接:
我想你必须重新编写大部分图形代码。您应该做的更改:
paintComponent(...)
方法李>paintComponent(...)
方法上方放置一个@Override注释,以确保您实际上正在重写super方法李>paintComponent(...)
作为paintComponent(...)
重写方法的第一行(通常)李>getGraphics()
获得的图形对象(很少有例外)李>paint(...)
或paintComponent(...)
(除了极少数例外,而且您当前的代码不符合例外条件,相信我)李>repaint()