[英]Java using Graphics to display shapes on a JFrame
我正在學習如何用 Java 編寫圖形用戶界面。 我幾乎知道一些基礎知識,但在這個程序中,我試圖在黑色背景上繪制 JFrame,但是一旦我運行該程序,JFrame 只會在白色背景上顯示一條白線。 如果有人知道如何解決這個問題,我將不勝感激,我一直在嘗試自己,但我似乎無法弄清楚。 感謝您的關注。 我期待着回復。
public class test1 {
public static void main (String[] args)
{
JFrame frame = new JFrame();
frame.setSize(1835,1019);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setResizable(false);
frame.getContentPane().setBackground(Color.BLACK);
JPanel raum = new JPanel()
{
public void paint(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.setPaint(Color.WHITE);
g2.drawLine(500,500,500,800);
}
};
frame.add(raum);
}
}
raum
Panel 是占據框架的,所以框架的背景與JPanel 的背景顏色相同。 所以你必須在繪制其他形狀之前繪制背景。
JPanel raum = new JPanel()
{
public void paint(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.BLACK);
g2.fillRect(0, 0, this.getWidth(), this.getHeight());
g2.setPaint(Color.WHITE);
g2.drawLine(500,500,500,800);
}
};
有許多問題會導致您在未來遇到無窮無盡的問題。
顯而易見的一個事實是面板的背景顏色非常接近WHITE
,因此很難看到線條。 您可以更改面板或線條的背景顏色,它應該可以解決當前的問題。
您確實需要查看在 AWT 和 Swing中執行自定義繪畫和繪畫,以更好地了解繪畫在 Swing 中的工作原理。
通常建議覆蓋paintComponent
並避免覆蓋paint
。 paint
做了很多工作,除非你願意承擔所有的工作量,否則最好避免它。
作為一般規則,您還應該在進行任何自定義繪畫之前調用super.paintXxx
方法。 同樣,繪畫通常是一個復雜的工作流程,最好讓父類完成它的工作。
一個組件還應該向父容器提供大小提示,然后父容器可以做出更好的決定(通過LayoutManager
)關於所有組件的布局方式。 因為不同的平台(甚至具有不同設置的相同平台)可以生成不同大小的窗口裝飾,所以最好管理“內容”的大小而不是“窗口”的大小。 同樣,這將讓您在未來無止境地頭痛。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setBackground(Color.BLACK);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(1080, 1920);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.setPaint(Color.WHITE);
g2d.drawLine(500, 500, 500, 800);
g2d.dispose();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.