[英]How to display a graphic from another class
我試圖在主類的JPanel上顯示來自單獨類的圖形。
主要課程是mytest,單獨的課程是Ball。 球具有繪畫成分方法,並且僅繪制一個彩色圓圈。 在mytest中,我實例化了一個球並將其添加到JPanel(dp):dp.add(ball)。 非常簡單,但是我所得到的只是白色面板背景,沒有繪制球。
package myStuff;
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class mytest {
private JFrame frame=new JFrame();
private JPanel dp = new JPanel();
public static void main(String[] args) {
mytest gui = new mytest();
gui.go();
}
public void go() {
frame.setTitle("Test");
frame.setSize(1000,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel dp=new JPanel();
dp.setBackground(Color.WHITE);
Ball ball = new Ball(dp.getWidth(),dp.getHeight());
dp.add(ball);
frame.add(dp);
frame.setVisible(true);
}
}
package myStuff;
import java.awt.*;
import javax.swing.*;
public class Ball extends JComponent{
private int Width;
private int Height;
public Ball (int width, int height ) {
Width=width;
Height=height;
}
@Override
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
super.paintComponent(g2d);
g2d.setColor(Color.RED);
g2d.fillOval(Width/2,Height/2,40,40);
System.out.println("Doing graphics....");
}
}
dp面板上應出現一個紅色的球。 我得到的只是面板背景,沒有球。 我知道它正在嘗試,因為“執行圖形”打印了兩次。
這是一個工作示例。
import java.awt.*;
import javax.swing.*;
public class Mytest {
private JFrame frame = new JFrame();
public static void main(String[] args) {
Mytest gui = new Mytest();
SwingUtilities.invokeLater(() -> gui.go());
}
public void go() {
frame.setTitle("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel dp = new JPanel();
dp.setPreferredSize(new Dimension(500, 500));
dp.setBackground(Color.WHITE);
Ball ball = new Ball(150, 150);
dp.add(ball);
frame.add(dp);
frame.pack(); // invokes layout and sizes components
frame.setLocationRelativeTo(null); // centers on screen
frame.setVisible(true);
}
}
class Ball extends JComponent {
private int width;
private int height;
// A ball should probably only have a "diameter"
public Ball(int width, int height) {
this.width = width;
this.height = height;
setPreferredSize(new Dimension(width, height));
}
@Override
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
super.paintComponent(g2d);
g2d.setColor(Color.RED);
// smooths out the graphics
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.fillOval(0, 0, width, height);
System.out.println("Doing graphics....");
}
}
最大的兩個建議是:
之所以沒有繪制紅球(或僅繪制一個紅球的1/4),是因為您更改了在“組件”窗口中繪制紅球的位置。 您試圖在width / 2和height / 2(組件的中心)處繪制它。 對於常規渲染,該值應為0,0。
另請參閱The Java Tutorials 1中有關繪畫的內容
您正在設置框架的尺寸,但是面板的尺寸為零。 您應該設置面板的首選大小,而不是框架的大小。 然后獲取面板的首選大小,以傳遞給Ball構造函數,並在使框架可見之前打包框架。
在行前設置面板尺寸,
Ball ball = new Ball(dp.getWidth(),dp.getHeight());
然后添加此代碼
setPreferredSize(new Dimension(Width, Height));
在“球”構造函數的末尾。
有關更多詳細信息,請參見此堆棧問題 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.