gpt4 book ai didi

java - 在java中为jframe添加不同的jcomponents

转载 作者:行者123 更新时间:2023-11-30 07:01:27 24 4
gpt4 key购买 nike

我想在一个 JPanel 中绘制一些不同的 JComponents。我用不同的绘制方法创建了一些 JComponents。然后在main中创建对象,放到JFrame中。我的问题是,只有最后一个对象被绘制在窗口中。

如何在窗口中放置不同的 JComponents,而不删除或重新绘制旧的?

(Model2 和 Model1 一样,但是 paintComponent 有点不同)

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class GuiModel{
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setSize(600, 600);
frame.setLocation(150, 150);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

frame.getContentPane().add(new Model1(0,0));
frame.getContentPane().add(new Model2(25,37,true));

}
}
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JComponent;
public class Model1 extends JComponent {
private int xPos, yPos;


Model1 (int x, int y){
this.xPos = x;
this.yPos = y;
}

@Override
protected void paintComponent(Graphics g) {
g.setColor(Color.BLACK);
g.drawOval(xPos, yPos, 5, 5);
}
}

最佳答案

自定义绘画时:

  1. 您需要覆盖组件的 getPreferredSize() 方法以返回组件的大小,以便布局管理器可以显示组件。现在您的组件的大小是 (0, 0),所以没有什么可绘制的。

  2. 组件的绘制是从 (0, 0) 而不是 (x, y) 开始的。然后,如果您将组件定位在面板上的特定点,您可以使用 setLocation(x, y) 告诉 Swing 在何处绘制组件。

  3. 如果要在随机位置绘制组件,则还需要在面板上使用空布局,并且还必须设置组件的大小。要设置组件的大小,您可以在构造函数中使用 setSize(getPreferredSize())。

所以你的 Model1 类看起来像这样:

public class Model1 extends JComponent {
//private int xPos, yPos;

Model1 (int x, int y){
//this.xPos = x;
//this.yPos = y;
setLocation(x, y);
setSize( getPreferredSize() );
}

@Override
public Dimension getPreferredSize()
{
return new Dimension(5, 5);
}
@Override
protected void paintComponent(Graphics g) {
g.setColor(Color.BLACK);
//g.drawOval(xPos, yPos, 5, 5);
g.drawOval(0, 0, 5, 5);
}
}

关于java - 在java中为jframe添加不同的jcomponents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29849882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com