package Main;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
public class Main extends JFrame{
public static void main(String[] args) {
int width = 800;
int height = 600;
String title = "Test";
JFrame display = new JFrame();
display.setTitle(title);
display.setSize(width, height);
display.setVisible(true);
display.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint(Graphics g) {
g.setColor(Color.white);
g.drawLine(0, 100, 800, 300);
getContentPane().setBackground(Color.black);
}
}
我正在使用Java的JFrame。所以这不是承认油漆方法,也无法找出原因。我一直在观看YouTube视频,看看是否有人遇到过类似的问题,但是我发现的一切似乎都无法解决问题。
当我在主要部分设置背景颜色时,它会起作用,位于绘画中,它似乎没有做任何事情并将其留空。
它是黑色背景上的白线,所以我应该很容易看到它。
答案 0 :(得分:1)
不可否认,我对Swing知之甚少(我更喜欢JavaFX)。但是,很明显,你的Main类是一个JFrame,所以你不应该在其中创建一个新类。您在display
上调用的所有方法都是在当前类中构建的。基本上,在你的JFrame中你创建了一个新的JFrame。但是,您在父JFrame上调用了paint
方法,这种方法从未显示过。这解决了您的问题(您可能需要全屏显示窗口):
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
public class Main extends JFrame{
public static void main(String[] args) {
new Main();
}
public Main() {
int width = 800;
int height = 600;
String title = "Test";
setTitle(title);
setSize(width, height);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.WHITE);
g.drawLine(100, 100, 800, 300);
getContentPane().setBackground(Color.black);
}
}
答案 1 :(得分:0)
您正在使用
创建JFrame
的实例
JFrame display = new JFrame();
但是JFrame
类没有在黑色背景上绘制白线的逻辑。该逻辑位于您的自定义类Main
中。因此,您应该创建Main
的实例:
JFrame display = new Main();
然而,这种改变仍然无法解决问题,因为您正在设置“内容窗格”的背景颜色,而是尝试直接在JFrame
本身上绘制。这里首选的解决方案是扩展JPanel
而不是JFrame
并覆盖其paintComponent()
方法。然后创建一个新类的实例以用作内容痛苦:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MainPanel extends JPanel{
public static void main(String[] args) {
int width = 800;
int height = 600;
String title = "Test";
JFrame display = new JFrame();
display.setTitle(title);
display.setSize(width, height);
display.setVisible(true);
display.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
display.setContentPane(new MainPanel());
}
public MainPanel() {
setBackground(Color.black);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.white);
g.drawLine(0, 100, 800, 300);
}
}
注意:
我在构造函数中调用setBackground()
,因为它不依赖于传递给Graphics
的{{1}}实例。这也避免了每个渲染的另一个函数调用的开销。
在paintComponent()
中,我致电paintComponent()
。这允许super.panitComponent()
清除要绘制的区域和任何其他必要的初始化。