对于家庭作业,我正在尝试paintComponent
使用用户输入的变量来绘制一个框。我已经能够使用固定数字构建我需要做的事情。我整天都在做这件事,一直没能找到实现变量的方法。这是我正在研究的精简版:
import javax.swing.*;
import java.awt.*;
public class Problem3 extends JFrame{
public static void main(String[] args) {
int xCoord = Integer.parseInt(
JOptionPane.showInputDialog("Enter an X cord."));
JFrame gd = new JFrame();
gd.setLocationRelativeTo(null);
gd.setSize(300, 300);
gd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gd.setVisible(true);
gd.add(new NewPanel());
}
public int getX(){
return xCoord;
}
}
class NewPanel extends JPanel {
int xCoord = getX();
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.drawRect(10,10,xCoord,50);
}
}
编辑
自从在这里发布以来,我尝试在 NewPanel 类中使用 setter 方法
public void setX() {
xCoord = Integer.parseInt(
JOptionPane.showInputDialog("Enter an X cord."));
}
运行这会导致我以前从未见过的奇怪错误:我收到 StackOverFlow 错误,然后对话框弹出多次/数百次并且不会停止弹出。
编辑 3使用充满鳗鱼的气垫船解决方案,我让它工作了!感谢 Full Of Eels 的时间、帮助和耐心。
public class Problem3 extends JFrame{
public static void main(String[] args) {
JFrame gd = new JFrame();
gd.setLocationRelativeTo(null);
gd.setSize(300, 300);
gd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gd.setVisible(true);
NewPanel panel = new NewPanel();
panel.setX(50);
gd.add(panel);
}
}
class NewPanel extends JPanel {
int xCoord;
public void setX(int x){
xCoord = x;
}
public int getX(){
return xCoord;
}
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.drawRect(10,10,xCoord,50);
}
}