自定义绘制的 JPanel 不会出现在 JFrame 中
Custom painted JPanel won't appear in JFrame
我一直在尝试为物理项目设计一个程序,但我遇到了问题。这是代码:
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class Cannon extends JFrame {
Cannon() {
setTitle("Cannonball Experiment");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
c.add(new ImagePanel());
c.add(new ModifierPanel());
setSize(400,600);
setVisible(true);
}
class ImagePanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(0,100,200,300);
}
}
class ModifierPanel extends Panel {
JLabel Text = new JLabel("Speed");
JTextField Tf = new JTextField(10);
ModifierPanel() {
add(Text);
add(Tf);
}
}
public static void main(String[] args) {
Cannon frame = new Cannon();
}
}
ModifierPanel
显示正常,但我在修改器之前添加的 JPanel
没有显示。
JPanel
ImageJPanel 不显示任何内容,因此它的尺寸为 (0,0)。
尝试为您的 JPanel 提供维度覆盖方法 getPreferredSize
,如下所示:
class ImagePanel extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(0,100,200,300);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(500,300); //for example
}
}
您使用的 FlowLayout
符合 getPreferredSize
,所以您不会有任何问题。试试让我知道...
尝试在图像面板中缓冲图像..
public class ImagePanel extends JPanel{
private BufferedImage image;
public ImagePanel() {
try {
image = ImageIO.read(new File("specify image name and path"));
} catch (IOException ex) {
// exception...
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, null);
}
我一直在尝试为物理项目设计一个程序,但我遇到了问题。这是代码:
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class Cannon extends JFrame {
Cannon() {
setTitle("Cannonball Experiment");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
c.add(new ImagePanel());
c.add(new ModifierPanel());
setSize(400,600);
setVisible(true);
}
class ImagePanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(0,100,200,300);
}
}
class ModifierPanel extends Panel {
JLabel Text = new JLabel("Speed");
JTextField Tf = new JTextField(10);
ModifierPanel() {
add(Text);
add(Tf);
}
}
public static void main(String[] args) {
Cannon frame = new Cannon();
}
}
ModifierPanel
显示正常,但我在修改器之前添加的 JPanel
没有显示。
JPanel
ImageJPanel 不显示任何内容,因此它的尺寸为 (0,0)。
尝试为您的 JPanel 提供维度覆盖方法 getPreferredSize
,如下所示:
class ImagePanel extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(0,100,200,300);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(500,300); //for example
}
}
您使用的 FlowLayout
符合 getPreferredSize
,所以您不会有任何问题。试试让我知道...
尝试在图像面板中缓冲图像..
public class ImagePanel extends JPanel{
private BufferedImage image;
public ImagePanel() {
try {
image = ImageIO.read(new File("specify image name and path"));
} catch (IOException ex) {
// exception...
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, null);
}