Java 如何将paintComponent()添加到JPanel
我有2个班,2班和4班。我希望使用p4.add(c2o)和f.add(p4)方法将Class2中的绘画从Class4添加到Class4中的JPanel中。我在添加GUI方面没有问题,但我就是不能添加图形 Class4:Java 如何将paintComponent()添加到JPanel,java,swing,object,graphics,awt,Java,Swing,Object,Graphics,Awt,我有2个班,2班和4班。我希望使用p4.add(c2o)和f.add(p4)方法将Class2中的绘画从Class4添加到Class4中的JPanel中。我在添加GUI方面没有问题,但我就是不能添加图形 Class4: import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; public class Class4 {
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Class4 {
public void mainMethod(int event){
JFrame f = new JFrame("Love Test");
if(event == 0){
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(500,200);
f.setLayout(null);
JPanel p = new JPanel(new BorderLayout());
p.setBounds(150, 0, 350, 75);
Class3 c3o = new Class3();
p.add(c3o);
f.add(p);
JPanel p2 = new JPanel();
Class7 c7o = new Class7();
p2.add(c7o);
p2.setBounds(0, 75, 500, 40);
f.add(p2);
JPanel p3 = new JPanel();
p3.setBounds(0, 0, 150, 75);
Class5 c5o = new Class5();
p3.add(c5o);
f.add(p3);
f.setVisible(true);
}
if(event == 5){
JPanel p4 = new JPanel();
Class2 c2o = new Class2();
p4.add(c2o);
p4.setBounds(0,115,500,55);
f.add(p4);
}
}
}
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import java.util.Random;
import java.awt.*;
public class Class2 extends JPanel{
public void paint(Graphics g){
super.paint(g);
this.setBackground(Color.WHITE);
g.setColor(new Color(0,0,0));
String str = "";
String str2 = "";
Random rlove = new Random();
int love = rlove.nextInt(101);
Class3 c3o = new Class3();
str = c3o.boy.getText() + " and " + c3o.girl.getText() + "'s amount of love is " + love + "%.";
if(love >= 0 && love < 10){
str2 = "Stop thinking about that person anymore!";
}
if(love >= 10 && love < 20){
str2 = "1/100 percent chance...";
}
if(love >= 20 && love < 30){
str2 = "Little hope...";
}
if(love >= 30 && love < 40){
str2 = "Not even a kiss, stop talking about French kisses! (wise words of Rubesh)";
}
if(love >= 40 && love < 50){
str2 = "Near passing";
}
if(love >= 50 && love < 60){
str2 = "Just Pass";
}
if(love >= 60 && love < 70){
str2 = "Some effort needed.";
}
if(love >= 70 && love < 80){
str2 = "Grade A. A good chance.";
}
if(love >= 80 && love < 90){
str2 = "Good pair. Very good relationship!";
}
if(love >= 90 && love < 100){
str2 = "Perfect pair. Lost for words.";
}
if(love == 100){
str2 = "OH MY GOD!!!!!";
}
g.drawString(str,10,10);
g.drawString(str2,10,30);
}
}
Class2:
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Class4 {
public void mainMethod(int event){
JFrame f = new JFrame("Love Test");
if(event == 0){
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(500,200);
f.setLayout(null);
JPanel p = new JPanel(new BorderLayout());
p.setBounds(150, 0, 350, 75);
Class3 c3o = new Class3();
p.add(c3o);
f.add(p);
JPanel p2 = new JPanel();
Class7 c7o = new Class7();
p2.add(c7o);
p2.setBounds(0, 75, 500, 40);
f.add(p2);
JPanel p3 = new JPanel();
p3.setBounds(0, 0, 150, 75);
Class5 c5o = new Class5();
p3.add(c5o);
f.add(p3);
f.setVisible(true);
}
if(event == 5){
JPanel p4 = new JPanel();
Class2 c2o = new Class2();
p4.add(c2o);
p4.setBounds(0,115,500,55);
f.add(p4);
}
}
}
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import java.util.Random;
import java.awt.*;
public class Class2 extends JPanel{
public void paint(Graphics g){
super.paint(g);
this.setBackground(Color.WHITE);
g.setColor(new Color(0,0,0));
String str = "";
String str2 = "";
Random rlove = new Random();
int love = rlove.nextInt(101);
Class3 c3o = new Class3();
str = c3o.boy.getText() + " and " + c3o.girl.getText() + "'s amount of love is " + love + "%.";
if(love >= 0 && love < 10){
str2 = "Stop thinking about that person anymore!";
}
if(love >= 10 && love < 20){
str2 = "1/100 percent chance...";
}
if(love >= 20 && love < 30){
str2 = "Little hope...";
}
if(love >= 30 && love < 40){
str2 = "Not even a kiss, stop talking about French kisses! (wise words of Rubesh)";
}
if(love >= 40 && love < 50){
str2 = "Near passing";
}
if(love >= 50 && love < 60){
str2 = "Just Pass";
}
if(love >= 60 && love < 70){
str2 = "Some effort needed.";
}
if(love >= 70 && love < 80){
str2 = "Grade A. A good chance.";
}
if(love >= 80 && love < 90){
str2 = "Good pair. Very good relationship!";
}
if(love >= 90 && love < 100){
str2 = "Perfect pair. Lost for words.";
}
if(love == 100){
str2 = "OH MY GOD!!!!!";
}
g.drawString(str,10,10);
g.drawString(str2,10,30);
}
}
import javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入java.util.Random;
导入java.awt.*;
公共类Class2扩展了JPanel{
公共空间涂料(图g){
超级油漆(g);
这个.背景(颜色.白色);
g、 setColor(新颜色(0,0,0));
字符串str=“”;
字符串str2=“”;
随机rlove=新随机();
int love=rlove.nextInt(101);
Class3 c3o=新的Class3();
str=c3o.boy.getText()+”和“+c3o.girl.getText()+”的爱的量是“+love+”%”;
如果(爱>=0&&love<10){
str2=“别再想着那个人了!”;
}
如果(爱>=10&&love<20){
str2=“1/100%的机会……”;
}
如果(爱>=20&&love<30){
str2=“小希望……”;
}
如果(爱>=30&&love<40){
str2=“甚至连一个吻都没有,别再谈法式吻了!(鲁比什的智慧之言)”;
}
如果(爱>=40&&love<50){
str2=“接近超车”;
}
如果(爱>=50&&love<60){
str2=“刚刚通过”;
}
如果(爱>=60和爱<70){
str2=“需要一些努力。”;
}
如果(爱>=70&&love<80){
str2=“A级。一个好机会。”;
}
如果(爱>=80&&love<90){
str2=“好搭档,关系很好!”;
}
如果(爱>=90&&love<100){
str2=“完美的一对。文字迷茫。”;
}
如果(爱=100){
str2=“哦,我的天啊!!!”;
}
g、 抽绳(str,10,10);
g、 抽绳(str2,10,30);
}
}
如何将paintComponent添加到JPanel p4?谢谢 这个问题没有简单明了的答案,但我会尽力解释 你需要做的是设置一个画布,就像你要放置一个按钮或标签一样,然后你需要添加一个鼠标听写器。MouseListener界面用于跟踪要在其中绘制项目的鼠标。我已经设置了一个完整的示例,包括颜色选择和形状选择,由于代码的共享量,我使用pastebin来共享 在这之后,我解释了这方面的关键要素。看看: 这里的关键要素如下 内部助手类“Board”是画布,它实现了MouseListener和MouseMotionListener,这是为了跟踪鼠标移动和按键
private class Board extends JPanel implements
MouseListener, MouseMotionListener {
paintComponent(Graphics g)是负责绘制的方法,我使用Graphics2D库创建形状
mousePressed(MouseEvent e)接收形状应绘制位置的起始坐标
public void mousePressed(MouseEvent e) {
startPoint = e.getPoint();
}
鼠标单击结束时调用MouseRelease(MouseEvent e),此方法处理图形的绘制。我使用了一个开关盒来处理不同的形状,然后检查坐标来处理形状的绘制。有关形状的详细信息
释放鼠标时,将运行以下代码:
shapes.add(s); //Adds the new shape to the Vector of shapes
startPoint = null; //Resets the starting ...
endPoint = null; //and ending coordinates to the system
colorList.add(color);
repaint(); //Repaints the entire canvas with the shapes in the Vector<Shape>
shapes.add//将新形状添加到形状向量中
startPoint=null//重置启动。。。
端点=空//和系统的结束坐标
颜色列表。添加(颜色);
重新油漆()//使用向量中的形状重新绘制整个画布
我不仅想在释放鼠标键时绘制形状,当拖动鼠标时,我想在移动时重新绘制形状,这是通过mouseDragged(MouseeEvent e)方法完成的
DISCALIMER:
这是我以前做的一个测试项目,如果我现在就开始做,我会做得更干净利落一点,但我希望这能帮助你解决问题
如果你需要用一种类似养老金的功能性来画“自由之手”,这并不能真正涵盖它,除非你能建立在逻辑的基础上。“图形”有点模糊……)
但普林在如何创建圆点方面提供了一些帮助。我建议创建一个二维数组,这样您就可以添加反向选项:)
JPanel#paint
,建议使用JPanel#paintComponent
,请查看Class2
的getPreferredSize
方法,并返回布局管理器的适当大小1) 为了更快地获得更好的帮助,请发布一个。2) 为属性提供合理的名称。1)“扩展JPanel{public void paint(Graphics g){”用于
JComponent
中的自定义绘制,重写paintComponent(Graphics)
而不是paint(Graphics)
。2)f.setLayout(null);
而不是布局内容并调用pack()
。3)使用合理的类名(1级非常混乱)4)Class2没有首选大小,在将其添加到父级之前,您也没有为其指定任何大小。我看不出这如何回答OP的问题,甚至无法解决OP已演示的基本问题…感谢您回答我的第一个问题!感谢您的回答,但我似乎感到困惑。什么是最重要的?什么是最重要的“重写Class2的getPreferredSize方法,并返回布局管理器的适当大小"?我只有13岁…覆盖是一个与继承相关的术语。基本上它意味着覆盖专利方法的功能。查看更多详细信息感谢您的回答!这很有帮助!我已经解决了问题。一个是您所说的,没有首选大小。另一个是,当我向JPanel添加一些内容时,我得到了要将其添加到a之前,请将JFrame设置为可见。感谢大家的支持