gpt4 book ai didi

java - 在 Swing Java 中绘图

转载 作者:行者123 更新时间:2023-12-01 13:08:21 26 4
gpt4 key购买 nike

我正在制作“谁是百万富翁”游戏。

这是帮助面板,用户可以选择其中一个选项,例如:调用 friend 、询问观众等。

但我有一个问题,选项是省略号,是在类 Help_Option extends JComponent 中绘制的。当我单独测试这个类 Help_Option 时,它工作正常。但是当我将 Help_Option 对象添加到游戏面板(实际上是框架中的子面板)时,它只在面板上显示一条线,而不会绘制我的椭圆。

这是我的代码:

注意:a是JFrame,我没有复制整个方法initialize(JFrame a),因为它很长,我不认为错误来自那里。

   /******Helper panel**********/
JPanel help_area_container = new JPanel();

help_area_container.setBorder(BorderFactory.createLineBorder(Color.BLUE, 3));
help_area_container.setLayout(new GridLayout(4,0));

JPanel voting_container = new JPanel();
JPanel calling_container = new JPanel();
JPanel half_container = new JPanel();
JPanel take_container = new JPanel();
JPanel[] all_help_container = new JPanel[]{voting_container, calling_container, half_container, take_container};
for(int i = 0; i < all_help_container.length; i++){
all_help_container[i].setBorder(BorderFactory.createLineBorder(Color.RED));
all_help_container[i].setPreferredSize(new Dimension(350, help_area_container.getPreferredSize().height/4));
}

for(int j = 0; j < all_help_container.length; j++){
help_area_container.add(all_help_container[j]);
}

Help_Option voting_option = new Help_Option(all_help_container[0].getPreferredSize().width, all_help_container[0].getPreferredSize().height);
voting_option.setPreferredSize(new Dimension(all_help_container[0].getPreferredSize().width, all_help_container[0].getPreferredSize().height));
all_help_container[0].add(voting_option);

a.add(help_area_container, BorderLayout.EAST);
/*****************************/

这是 Help_Option 类:

class Help_Option extends JComponent implements MouseMotionListener{
private static int x, y;
private Ellipse2D ellipse;
private Color c = Color.BLACK;

public Help_Option(int x, int y){
Help_Option.x = x;
Help_Option.y = y;
ellipse = new Ellipse2D.Double(0, 0, x, y);
this.addMouseMotionListener(this);
}

public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;

g2d.setColor(Color.BLUE);
g2d.draw(ellipse);

g2d.setColor(c);
g2d.fill(ellipse);

g2d.setColor(Color.RED);
g2d.setFont(new Font("TimesRoman", Font.BOLD, 20));
g2d.drawString("Here I am", 250, 100);
}

public void setColor(Color c){
this.c = c;
}

@Override
public void mouseDragged(MouseEvent e) {

}

@Override
public void mouseMoved(MouseEvent e) {
if(ellipse.contains(e.getX(), e.getY())){
setColor(Color.GREEN);
repaint();
}else{
setColor(Color.BLACK);
repaint();
}
}
}

这是我用来测试 Help_Option 类的类:

public class Help extends JFrame{

public static void main(String [] agrs){
Help h = new Help();
h.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
h.init();
}

public void init(){
this.setLayout(new FlowLayout());
this.setSize(2000, 1000);

JPanel a = new JPanel();
a.setPreferredSize(new Dimension((int)a.getSize().width/3, (int)a.getSize().height/2));
a.setBorder(BorderFactory.createLineBorder(Color.yellow, 3));
Help_Option k = new Help_Option(a.getPreferredSize().width, a.getPreferredSize().height/2);
k.setPreferredSize(new Dimension(a.getPreferredSize().width, a.getPreferredSize().height));
a.add(k);

this.add(a);
this.setVisible(true);
}
}

编辑

This是我的类(class)的链接,请看一下。错误如上所述。

最佳答案

这是因为您尚未为前几个 JPanel 设置值,它们返回的首选尺寸为 0。尺寸为 0,0

所以您应该向那里的 JPanel 添加值。

public static void main(String[] args) {

JPanel help_area_container = new JPanel();

help_area_container.setBorder(BorderFactory.createLineBorder(
Color.BLUE, 3));
help_area_container.setLayout(new GridLayout(4, 0));

//Should have set sizes below
JPanel voting_container = new JPanel();
//voting_container.setSize(50,50);
JPanel calling_container = new JPanel();
JPanel half_container = new JPanel();
JPanel take_container = new JPanel();
JPanel[] all_help_container = new JPanel[] { voting_container,
calling_container, half_container, take_container };
for (int i = 0; i < all_help_container.length; i++) {
all_help_container[i].setBorder(BorderFactory
.createLineBorder(Color.RED));
all_help_container[i].setPreferredSize(new Dimension(350,
help_area_container.getPreferredSize().height / 4));
}

for (int i = 0; i < all_help_container.length; i++) {

System.out.println(all_help_container[i].getSize());

}

}

// where you can change the size
all_help_container[0].setSize(50, 50);

System.out.println("----");

for (int i = 0; i < all_help_container.length; i++) {

System.out.println(all_help_container[i].getSize());

}
}

希望这能帮助您调整 GUI 的大小。您必须调整不同的面板以满足您的需求。我猜测这个面板中还会包含一些其他内容。

您可能希望为每个面板创建自定义 JPanel,以便您可以轻松检查它们的尺寸是否合适。

public class VotingPanel extends JPanel {

public VotingPanel(){

//All your variables such as size and color schemes

}
}

关于java - 在 Swing Java 中绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23095631/

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