如何在一个类使用另外一个类的变量?

cart55free99 2009-11-16 09:11:21
我希望点一次MINUS就能让环上的小圆少一个 但是JosephP又需要用到JosephAwt的变量n 但是怎么用呢?

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

class JosephAwt extends JFrame implements ActionListener{
public JosephAwt(){
add(bu1,BorderLayout.SOUTH);
add(p,BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,500);
setVisible(true);
}

int n=8;
/* public int getN(){
return n;
}*/
Graphics g;
JosephP p=new JosephP();
JButton bu1=new JButton("MINUS");
public void actionPerformed(ActionEvent e){
if(e.getSource()==bu1)
n--;
p.paint(g);
}

public static void main(String[] args){
JosephAwt f = new JosephAwt();
}
}

class JosephP extends JPanel{
//JosephAwt f = new JosephAwt();
static double PI=3.1415926;
int x=50;
int y=70;
int rbig=150;
int xCenterB=x+rbig;//大圆圆心
int yCenterB=y+rbig;

int rsmall=30;
int xCenterS,yCenterS;
int n=8;//小圆个数

public void paint(Graphics g) {
g.drawOval(x,y,2*rbig,2*rbig);
for(int i=0;i<n;i++){
xCenterS=xCenterB+(int)Math.round(rbig*Math.sin(2*PI*i/n));
yCenterS=yCenterB+(int)Math.round(rbig*Math.cos(2*PI*i/n));
g.setColor(Color.red);
g.drawOval(xCenterS-rsmall, yCenterS-rsmall, 2*rsmall, 2*rsmall);
g.setFont(new Font("",Font.BOLD,23));
g.drawString(""+i,xCenterS,yCenterS);
}
}
}






...全文
142 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cart55free99 2009-11-17
  • 打赏
  • 举报
回复
好了
谢谢大家
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.event.*;

public class JosephAwt extends Canvas {

static double PI=3.1415926;
int x=50;
int y=70;
int rbig=150;
int xCenterB=x+rbig;//大圆圆心
int yCenterB=y+rbig;

int rsmall=30;
int xCenterS,yCenterS;
//小圆个数
static int n=8;

public void paint(Graphics g) {
g.drawOval(x,y,2*rbig,2*rbig);
for(int i=0;i<n;i++){
xCenterS=xCenterB+(int)Math.round(rbig*Math.sin(2*PI*i/n));
yCenterS=yCenterB+(int)Math.round(rbig*Math.cos(2*PI*i/n));
g.setColor(Color.red);
g.drawOval(xCenterS-rsmall, yCenterS-rsmall, 2*rsmall, 2*rsmall);
g.setFont(new Font("",Font.BOLD,23));
g.drawString(""+i,xCenterS,yCenterS);
}
}

public static void main(String[] args){
//JosephAwt f1 = new JosephAwt();

Graphics g;

JFrame f=new JFrame();
JButton bu1=new JButton("ss");
final JComponent newContentPane = new JPanel();
final Canvas newCanvas = new JosephAwt();
newCanvas.setSize(400,400);
newContentPane.add(newCanvas);
f.setContentPane(newContentPane);
bu1.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {
n--;
newContentPane.remove(newCanvas);
newContentPane.add(newCanvas);

}

});
//JComponent newCanvas = new JosephAwt();
f.add(bu1,BorderLayout.SOUTH);
f.add(newCanvas,BorderLayout.CENTER);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(400,500);
f.setVisible(true);
}
}
cart55free99 2009-11-17
  • 打赏
  • 举报
回复
提示说Graphics g = new Graphics (); 不能创建实例
bunrise 2009-11-17
  • 打赏
  • 举报
回复
Graphics g = new Graphics ();
你至少创建一个实例啊
cart55free99 2009-11-17
  • 打赏
  • 举报
回复
有新的问题 不知道各位能不能解决?如何用repaint()?
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.event.*;

public class JosephAwt extends JPanel {

static double PI=3.1415926;
int x=50;
int y=70;
int rbig=150;
int xCenterB=x+rbig;//大圆圆心
int yCenterB=y+rbig;

int rsmall=30;
int xCenterS,yCenterS;
//小圆个数
static int n=8;

public void paint(Graphics g) {
g.drawOval(x,y,2*rbig,2*rbig);
for(int i=0;i<n;i++){
xCenterS=xCenterB+(int)Math.round(rbig*Math.sin(2*PI*i/n));
yCenterS=yCenterB+(int)Math.round(rbig*Math.cos(2*PI*i/n));
g.setColor(Color.red);
g.drawOval(xCenterS-rsmall, yCenterS-rsmall, 2*rsmall, 2*rsmall);
g.setFont(new Font("",Font.BOLD,23));
g.drawString(""+i,xCenterS,yCenterS);
}
}



public static void main(String[] args){
//JosephAwt f1 = new JosephAwt();

Graphics g;

JFrame f=new JFrame();
JButton bu1=new JButton("ss");
JComponent newContentPane = new JosephAwt();
bu1.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {
n--;
g.repaint();
}

});

//JComponent newContentPane = new JosephAwt();
f.add(bu1,BorderLayout.SOUTH);
f.add(newContentPane,BorderLayout.CENTER);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(400,500);
f.setVisible(true);
}
}










cart55free99 2009-11-17
  • 打赏
  • 举报
回复
把N写一个get方法
试过了 不知道怎么总是不行
bunrise 2009-11-17
  • 打赏
  • 举报
回复
把N写一个get方法
cart55free99 2009-11-17
  • 打赏
  • 举报
回复

设成public static ?
把谁设成public static?
littlemonster 2009-11-16
  • 打赏
  • 举报
回复
我通常都这么做,也不知道性能上有啥影响。。

[Quote=引用 2 楼 coldanimal 的回复:]
设成public static
[/Quote]
cart55free99 2009-11-16
  • 打赏
  • 举报
回复
怎么做成内部的类啊?不会啊?能把代码送上吗?
ouyangyh 2009-11-16
  • 打赏
  • 举报
回复
建议把JosephP做成 JosepAWT的内部类,或者在给JosephP对像传入一个JosepAWT的对象
老张-AI 2009-11-16
  • 打赏
  • 举报
回复
public:表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用 



private:表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用
一头头 2009-11-16
  • 打赏
  • 举报
回复
设成public static
healer_kx 2009-11-16
  • 打赏
  • 举报
回复
这么放肆的事情你也问?

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧