Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JApplet Textfield/jbutton/nested loop程序,创建墙,在Textfield中输入行数_Java_Swing_Paintcomponent_Japplet - Fatal编程技术网

Java JApplet Textfield/jbutton/nested loop程序,创建墙,在Textfield中输入行数

Java JApplet Textfield/jbutton/nested loop程序,创建墙,在Textfield中输入行数,java,swing,paintcomponent,japplet,Java,Swing,Paintcomponent,Japplet,我目前正在使用JCreator,找不到我的代码有什么问题,因为某种原因,它没有读取我在JTextField中输入的内容。我不想大幅修改我的代码,如果有人能指出我做错了什么,或者给我一些代码示例,说明它应该是什么样子,那就太好了。同样,当他们做同样的事情时,不要寻找“这比这更好” import java.awt.*; import javax.swing.*; import java.util.*; import java.awt.event.ActionEvent; import java.aw

我目前正在使用
JCreator
,找不到我的代码有什么问题,因为某种原因,它没有读取我在
JTextField
中输入的内容。我不想大幅修改我的代码,如果有人能指出我做错了什么,或者给我一些代码示例,说明它应该是什么样子,那就太好了。同样,当他们做同样的事情时,不要寻找“这比这更好”

import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Wall extends JApplet implements ActionListener {

    double count;
    Boolean Submit = false;
    JButton btn1;
    JTextField  tf,field;
    int x = 0;
    int y = 575;
    int x1 = 50;
    int y1 = 25;
    int textnumber;
    Random randomNum = new Random();//initialize random variable
    int count2;

    public void init() {

        setLayout( new FlowLayout( ) );
        tf = new JTextField(5);
        field = new JTextField( "<===== Enter Brick Rows 1-20", 16 );   
        add( tf );  
        add( field );
        btn1 = new JButton("Submit");
        add(btn1);
        btn1.addActionListener(this);
    }

    public void actionPerformed(ActionEvent event){

        if (event.getSource()== btn1){
            Submit = true;
        }
    }

    public void paint(Graphics g, double BrickNumbers) {

        super.paint(g);
        while(Submit == true){
            DrawBrick(g,BrickNumbers);
        }
    }

    public void DrawBrick(Graphics g, double BrickNumbers){

        String Value = tf.getText();
        BrickNumbers = Double.parseDouble(Value);

        if(Submit == true){
            count = BrickNumbers;
            for(double count = BrickNumbers; ((count>=1) && (count <=20)); count--){

                int d = 1+ randomNum.nextInt(255);//get d variable
                int e = 1+ randomNum.nextInt(255);//get e variable
                int f = 1+ randomNum.nextInt(255);//get f variable
                Color randomcolor = new Color(d,e,f);
                g.setColor(randomcolor);
                g.fillRect(x, y, x1, y1);
                g.fillRect(x+ 50, y, x1, y1);
                g.fillRect(x+100, y, x1, y1);
                g.fillRect(x+150, y, x1, y1);
                g.fillRect(x+200, y, x1, y1);
                g.fillRect(x+250, y, x1, y1);   
                y = y - 25;
            }
        }
        repaint();
    }   
}
import java.awt.*;
导入javax.swing.*;
导入java.util.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
公共类Wall扩展JApplet实现ActionListener{
重复计数;
布尔提交=假;
JButton-btn1;
JTextField,field;
int x=0;
int y=575;
int-x1=50;
int y1=25;
int textnumber;
Random randomNum=new Random();//初始化随机变量
int count2;
公共void init(){
setLayout(新的FlowLayout());
tf=新的JTextField(5);

field=newjtextfield(“您的绘制方法中有一些错误代码,包括:

  • paint(…)
    方法中有一个while(true)循环,它将锁定GUI并阻止它响应任何东西
  • 您试图在从paint方法调用的方法中从JTextField读入。您的绘画代码或它调用的方法中不应该有程序逻辑
  • 首先,您不应该覆盖JApplet的
    paint(…)
    ,而应该覆盖JApplet持有的JPanel中的
    paintComponent(…)
  • 考虑添加代码来读取actionPerformed方法中的JTextField,因为这似乎是该逻辑的最佳位置
编辑

  • 您的paint方法永远不会被调用,因为它不是JApplet的paint方法的真正重载。您的paint方法有2个参数,一个paint方法应该只有一个参数
  • 在actionPerformed方法中,从JTextField获取值
  • 使用
    Integer.parseInt(…)
    将其转换为int,而不是double,因为您永远不会绘制砖块的一小部分
  • 在获取int后,设置一个int类字段,可能称为brickCount或类似的名称,然后调用repaint()
  • 在JPanel的
    paintComponent(…)
    方法(与paint类似,它应该只有一个参数,即图形)中,调用
    paintBricks()
    ,并让此方法使用brickCount字段值来决定要绘制的砖数
  • 切勿从
    paint(…)
    paintComponent(…)
    中调用
    repaint()
    ,或从这些方法中调用的任何方法调用
编辑2

下面的示例不做程序需要做的事情,但演示了如何从JTextField获取信息并在图形中使用它:

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

public class SimpleApplet extends JApplet {
   @Override
   public void init() {
      getContentPane().add(new SimpleAppletMainPanel());
   }
}

class SimpleAppletMainPanel extends JPanel {
   private static final Color CIRCLE_COLOR = Color.red.darker();
   private static final int CIRCLE_STROKE_WIDTH = 10;
   private static final int GAP = 3;
   private static final Stroke CIRCLE_STROKE = new BasicStroke((float)CIRCLE_STROKE_WIDTH);
   private JTextField textField = new JTextField(5);
   private JButton myButton = new JButton("Submit");
   private int count = 0;

   public SimpleAppletMainPanel() {
      ActionListener actionListener = new ActionListener() {
         public void actionPerformed(ActionEvent arg0) {
            try {
               count = Integer.parseInt(textField.getText());
               repaint();
            } catch (NumberFormatException e) {
               e.printStackTrace();
            }
         }
      };
      myButton.addActionListener(actionListener);
      textField.addActionListener(actionListener);
      add(new JLabel("Enter a number, 1-10:"));
      add(textField);
      add(myButton);
   }

   @Override
   protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      for (int i = 0; i < count; i++) {
         drawCircle(g, i);
      }
   }

   private void drawCircle(Graphics g, int layer) {
      int centerX = getWidth() / 2;
      int centerY = getHeight() / 2;
      int radius = layer * (CIRCLE_STROKE_WIDTH + GAP) + GAP;
      int x = centerX - radius ;
      int y = centerY - radius;

      Graphics2D g2b = (Graphics2D) g.create();
      g2b.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
      g2b.setStroke(CIRCLE_STROKE);

      g2b.setColor(CIRCLE_COLOR);
      g2b.drawOval(x, y, radius * 2, radius * 2);

      g2b.dispose();
   }
}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
公共类simpleaplet扩展了JApplet{
@凌驾
公共void init(){
getContentPane().add(新的SimpleAppletMainPanel());
}
}
类SimpleAppletMainPanel扩展了JPanel{
私有静态最终颜色圈_Color=Color.red.darker();
专用静态最终整数圆\笔划\宽度=10;
专用静态最终内部间隙=3;
专用静态最终冲程循环\冲程=新的基本冲程((浮动)循环\冲程\宽度);
私有JTextField textField=新JTextField(5);
私有JButton myButton=新JButton(“提交”);
私有整数计数=0;
公共SimpleAppletMainPanel(){
ActionListener ActionListener=新建ActionListener(){
已执行的公共无效操作(操作事件arg0){
试一试{
count=Integer.parseInt(textField.getText());
重新油漆();
}捕获(数字格式){
e、 printStackTrace();
}
}
};
myButton.addActionListener(actionListener);
addActionListener(actionListener);
添加(新JLabel(“输入一个数字,1-10:”);
添加(文本字段);
添加(我的按钮);
}
@凌驾
受保护组件(图形g){
超级组件(g);
for(int i=0;i
这将导致以下结果:

您的绘制方法中有一些错误代码,包括:

  • paint(…)
    方法中有一个while(true)循环,它将锁定GUI并阻止它响应任何东西
  • 您试图在从paint方法调用的方法中从JTextField读入。您的绘画代码或它调用的方法中不应该有程序逻辑
  • 首先,您不应该覆盖JApplet的
    paint(…)
    ,而应该覆盖JApplet持有的JPanel中的
    paintComponent(…)
  • 考虑添加代码来读取actionPerformed方法中的JTextField,因为这似乎是该逻辑的最佳位置
编辑

  • 您的paint方法永远不会被调用,因为它不是JApplet的paint方法的真正重载。您的paint方法有2个参数,一个paint方法应该只有一个参数
  • 在actionPerformed方法中,从JTextField获取值
  • 将其转换为int