Java 如何在JPanel和JFrame边界内绘制?
我的代码假设在JPanel中的任意位置绘制环,但由于某些原因,我的环有时会超出此界限,例如,它出现在下半部分。 据我所知,我的JPanel位于JFrame内,为了在该边界内绘制,我的环应使用以下表达式绘制:Java 如何在JPanel和JFrame边界内绘制?,java,swing,Java,Swing,我的代码假设在JPanel中的任意位置绘制环,但由于某些原因,我的环有时会超出此界限,例如,它出现在下半部分。 据我所知,我的JPanel位于JFrame内,为了在该边界内绘制,我的环应使用以下表达式绘制: xRing = (int)((frameWidth -ringSize)* (Math.random())); yRing = (int)((frameHeight-ringSize)*(Math.random())); setParamsRing(xRing, yRing, ringSiz
xRing = (int)((frameWidth -ringSize)* (Math.random()));
yRing = (int)((frameHeight-ringSize)*(Math.random()));
setParamsRing(xRing, yRing, ringSize);
有什么问题?
以下是所有代码:
public class mull extends JPanel implements ActionListener{
private static JPanel p;
Timer timer;
ActionListener updateProBar;
private double esize;
private double maxSize = 0;
private boolean initialize = true;
private int squareX = 50;
private int squareY = 50;
private int squareSize = 200;
private int ringX = 50;
private int ringY = 50;
private int ringSize = 100;
private static int frameWidth = 300;
private static int frameHeight = 300;
private int jPanelHeight;
private int jPanelWidth;
private int i = 0;
public mull() {
timer = new Timer(200, this);
timer.setInitialDelay(200);
timer.start();
}
int xRing;
int yRing;
@Override
public void actionPerformed(ActionEvent e) {
xRing = (int)((frameWidth -ringSize)* (Math.random()));
yRing = (int)((frameHeight-ringSize)*(Math.random()));
setParamsRing(xRing, yRing, ringSize);
repaint();
}
// public void getJPanelSize(){
// Rectangle r = p.getBounds();
// jPanelHeight = r.height;
// jPanelWidth = r.width;
// }
public void setParamsRing(int xpos, int ypos, int size){
this.ringX = xpos;
this.ringY = ypos;
this.ringSize = size;
}
public void setParamsSquare(int xpos, int ypos, int size){
this.squareX = xpos;
this.squareY = ypos;
this.squareSize = size;
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
g.drawOval(ringX, ringY, ringSize, ringSize);
g.setColor(Color.BLUE );
g.fillOval(ringX, ringY, ringSize, ringSize);
// g.setColor(Color.BLACK);
// g.drawRect(ringX, ringY, ringSize, ringSize);
// g.setColor(Color.BLUE );
// g.fillRect(ringX, ringY, ringSize, ringSize);
}
public static void main(String[] args) throws InterruptedException {
JFrame f = new JFrame("Swing Paint Demo");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
p = new JPanel();
p.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
// moveSquare(e.getX(),e.getY());
}
});
f.add(p);
f.add(new mull());
f.setSize(frameWidth, frameHeight);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
谢谢,这种方法奏效了! 我需要画圆环和正方形,但不能重叠。 问题是什么?我的代码似乎不起作用(尽管它似乎是正确的):
@覆盖
已执行的公共无效操作(操作事件e){
xRing=(int)((getWidth()-ringSize)*(Math.random());
yRing=(int)((getHeight()-ringSize)*(Math.random());
xSquare=(int)((getWidth()-squareSize)*(Math.random());
ySquare=(int)((getHeight()-squareSize)*(Math.random());
而(您的代码中的问题是,您正在画的面板不是维度<代码>框架宽度>代码> x>代码>框架高度但较小。框架的边界设置为这些值,但您必须考虑标题栏和边框,这使得实际面板比它小一点。
您可以改为使用面板的宽度和高度:
xRing = (int) ((getWidth() - ringSize) * Math.random());
yRing = (int) ((getHeight() - ringSize) * Math.random());
setParamsRing(xRing, yRing, ringSize);
xRing = (int) ((getWidth() - ringSize) * Math.random());
yRing = (int) ((getHeight() - ringSize) * Math.random());
setParamsRing(xRing, yRing, ringSize);