Java 如何在paintComponent外部调用draw方法
我有一个任务,我必须在面板上画一个圆圈,用这个圆圈计算当圆圈改变大小或颜色时用户的反应时间。我得到了paintComponent方法。但是现在我不得不在另一个类中调用圆的方法,我不知道怎么做。有人能帮我吗 这是我编写paintComponent的班级:Java 如何在paintComponent外部调用draw方法,java,swing,jpanel,draw,paintcomponent,Java,Swing,Jpanel,Draw,Paintcomponent,我有一个任务,我必须在面板上画一个圆圈,用这个圆圈计算当圆圈改变大小或颜色时用户的反应时间。我得到了paintComponent方法。但是现在我不得不在另一个类中调用圆的方法,我不知道怎么做。有人能帮我吗 这是我编写paintComponent的班级: public class ReactionPanel extends JPanel { boolean setSmallCircle, setInitialCircle; Color color = new Color (255,0,0); /
public class ReactionPanel extends JPanel {
boolean setSmallCircle, setInitialCircle;
Color color = new Color (255,0,0); //color = red
Color c = new Color (255,255,0); //color = yellow
int size;
int x = 250;
int y = x;
public void paintComponent(Graphics g){
super.paintComponent(g);
if (setInitialCircle){
size = 50;
}
if (setSmallCircle) {
size = 50;
}
else {
size = 150;
}
g.drawOval(x,y,size,size);
g.fillOval(x,y,size,size);
}
void setInitialCircle(Graphics g, Color color){
g.setColor(color);
}
void setSmallCircle(Graphics g, Color c){
g.setColor(c);
}
void setBigCircle(Graphics g, Color c){
g.setColor(c);
}
}
现在我需要这些(setInitialCircle
etc)并在我的主类ReactionExperiment中调用它们,如下所示:
void startTest(){
//draw red circle
}
我该怎么做?
谢谢你的帮助 我相信你想要这个
ReactionPanel reactionPanel = new ReactionPanel();
reactionPanel.setSmallCircle(x, x);
这段代码的作用是实例化ReactionPanel(它创建了一个新的实例)。因此,您可以在另一个类中使用它的方法。我假设您有两个类,并且您希望从一个类调用另一个类中定义的公共函数。由于该方法不是静态方法,因此必须为类实例化一个对象,如-
ReactionPanel obj = new ReactionPanel();
然后使用这个对象,您可以调用第一个类中定义的任何方法,如
obj.paintComponent(g); // you'll have to define g first though
实际上我已经尝试过了,但是它给了我以下错误:ReactionExperiment.ReactionPanel中的
setSmallCircle(java.awt.Graphics,java.awt.Color)不能应用于(int,int)
并且x在java.awt.Component中不是公共的;无法从外部软件包访问
emm。。。。(x,x)你的意思是用你想要的任何参数来代替它们。X只是一个例子。你需要传入方法期望的参数好吧,因为我在setSmallCircle方法中定义了x,所以我想我不必再定义它了。但即便如此,它还是给了我我提到的第一个错误,因为你似乎仍然在传递错误的论点。您的方法需要2个int值,但可能您正在声明或传递的不是int值。因此,要么您可以强制转换它(不管它的值是什么),要么您需要更改它,以便该方法接收适当的参数,我已经意识到我的错误。谢谢您的帮助:)但是使用obj.paintComponent(g)
如何获得像setSmallCircle
这样的特定方法?如果这是一个愚蠢的问题,我很抱歉,我只是想理解和学习这只是一个例子,你所要做的就是“obj.setSmallCircle(g,c);//首先定义g和c”没有问题是愚蠢的,尽管你必须仔细地在StackOverflow上构建它!哦,哇,我真是太蠢了,我不小心被reactionPanel.setSmallcircle(g,color)代码>而不是大写C。但非常感谢您的帮助!:)使用受保护的方法作为如何调用方法的示例有点。。。不幸的是:-考虑编辑和使用其他方法。- 1,@ LaynIExx,你不应该直接调用PruttCuffice()。您应该使用obj.repaint()
通知组件重新绘制自身。