Java 在JPanel中绘制时未绘制任何内容
我试图在JPanel中绘制一个矩形,但是它不会显示,它在框架中工作 如果取消注释//frame.getContentPane().add(rect)//如果它在框架中,将绘制 和注释框。getContentPane()。添加(面板);//但不在小组内 矩形将绘制 谢谢你的帮助Java 在JPanel中绘制时未绘制任何内容,java,swing,user-interface,graphics,paintcomponent,Java,Swing,User Interface,Graphics,Paintcomponent,我试图在JPanel中绘制一个矩形,但是它不会显示,它在框架中工作 如果取消注释//frame.getContentPane().add(rect)//如果它在框架中,将绘制 和注释框。getContentPane()。添加(面板);//但不在小组内 矩形将绘制 谢谢你的帮助 import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DrawingRect{
public static void main(String[] args) {
DrawingRect d = new DrawingRect();
}
public DrawingRect(){
JFrame frame = new JFrame("Drawing a rect");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension (500,500));
Rect rect = new Rect();
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension (500,500));
panel.setVisible(true);
panel.add(rect);
//frame.getContentPane().add(rect); //Will draw if its in the frame
frame.getContentPane().add(panel); // but not in the panel
frame.pack();
frame.setVisible(true);
panel.repaint();
frame.repaint();
}
public class Rect extends JComponent{
private static final long serialVersionUID = 1L;
public void paint(Graphics g)
{
g.setColor(Color.black);
g.drawRoundRect(10, 10, 100, 100, 20, 20);
}
}
}
你的直肠画得很好,但它很小!要了解我的意思,请在渲染后显示其大小:
Rect rect = new Rect();
rect.setBorder(BorderFactory.createTitledBorder("rect"));
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(500, 500));
panel.setVisible(true);
panel.add(rect);
// frame.getContentPane().add(rect); //Will draw if its in the frame
frame.getContentPane().add(panel); // but not in the panel
frame.pack();
frame.setVisible(true);
System.out.println(rect.getSize());
您将得到如下结果:
java.awt.Dimension[width=1,height=1]
这意味着它只有1像素乘1像素——太小了,看不见
解决方案是使用适当的布局,并给它一个首选的大小,以便它将显示。e、 g
public class Rect extends JComponent {
private static final long serialVersionUID = 1L;
private static final int PREF_W = 150;
private static final int PREF_H = 150;
@Override
// public void paint(Graphics g) {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.black);
g.drawRoundRect(10, 10, 100, 100, 20, 20);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(PREF_W, PREF_H);
}
}
另外,使用JComponent的paintComponent方法绘制,而不是其绘制方法。您的Rect绘制得很好,但它非常小!要了解我的意思,请在渲染后显示其大小:
Rect rect = new Rect();
rect.setBorder(BorderFactory.createTitledBorder("rect"));
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(500, 500));
panel.setVisible(true);
panel.add(rect);
// frame.getContentPane().add(rect); //Will draw if its in the frame
frame.getContentPane().add(panel); // but not in the panel
frame.pack();
frame.setVisible(true);
System.out.println(rect.getSize());
您将得到如下结果:
java.awt.Dimension[width=1,height=1]
这意味着它只有1像素乘1像素——太小了,看不见
解决方案是使用适当的布局,并给它一个首选的大小,以便它将显示。e、 g
public class Rect extends JComponent {
private static final long serialVersionUID = 1L;
private static final int PREF_W = 150;
private static final int PREF_H = 150;
@Override
// public void paint(Graphics g) {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.black);
g.drawRoundRect(10, 10, 100, 100, 20, 20);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(PREF_W, PREF_H);
}
}
另外,使用JComponent的paintComponent方法绘制,而不是它的paint方法。尝试将其放入
paintComponent
而不是paint
,也可能不尝试在构造函数中执行所有操作……尝试将其放入paintComponent
而不是paint
,也可能不尝试在构造器中做所有的事情…我只是想发布这个,打败我+1谢谢!:)这只是我论文的一小部分,但你为我节省了很多时间/麻烦/睡眠。。我的计划是绘制多个矩形(数据结构的对象),我想我只需在Rect类中的draw方法中设置x和y来定位它,不管它们如何添加到flowLayout中的JPanel中或其用途如何。。绘制多个矩形的最佳方法是什么。我已经使用了两个矩形,并使用..按预期绘制了重叠。。swingPanel.setLayout(新的BorderLayout(0,0));1.立根(40,50,110,110);直线立根(50,50,110,110);那是不是有点像黑客acceptable@Andy考虑创建一个<代码> ARARYList,在PrultCe组件方法中,使用for循环来遍历每个矩形的列表。我正要张贴这篇文章,把它打给它。1谢谢!:)这只是我论文的一小部分,但你为我节省了很多时间/麻烦/睡眠。。我的计划是绘制多个矩形(数据结构的对象),我想我只需在Rect类中的draw方法中设置x和y来定位它,不管它们如何添加到flowLayout中的JPanel中或其用途如何。。绘制多个矩形的最佳方法是什么。我已经使用了两个矩形,并使用..按预期绘制了重叠。。swingPanel.setLayout(新的BorderLayout(0,0));1.立根(40,50,110,110);直线立根(50,50,110,110);那是不是有点像黑客acceptable@Andy考虑创建一个<代码> ARARYList,在PrultCe组件方法中,使用for循环重复遍历每个矩形的列表。