图形输入字符串



我希望这个程序能够绘制用户的写作输入。我不知道如何使方法paint将输入n作为变量(n无法解析为变量)。

package naplety;
import java.awt.*;
import javax.swing.*;
import java.util.Scanner;
import java.awt.color.*;
import java.util.Random;
public class Bucky extends JApplet{
    public void ustaw(){
            Scanner input = new Scanner(System.in);
            String n = input.next();
            input.close();
    }
    public void paint(Graphics g){
        Random rand = new Random();
        float red = rand.nextFloat();
        float green = rand.nextFloat();
        float blue = rand.nextFloat();
        Color randomColor = new Color(red,green,blue);
        g.setColor(randomColor);
        g.drawString(n, 100, 100);
    }
}

您不应该将控制台输入与 GUI 代码混合使用。而是从JTextField或JOptionPane获取输入。

另外,切勿直接在 JApplet 中绘制,而是在 JPanel 的 paintComponent 方法中绘制,然后在小程序中显示 JPanel。

我自己,我会在 JLabel 中显示文本:

import java.awt.*;
import javax.swing.*;
import java.util.Random;
public class Bucky extends JApplet {
   private String s = "";
   private JLabel label = new JLabel("", SwingConstants.CENTER);
   @Override
   public void init() {
      Random rand = new Random();
      float red = rand.nextFloat();
      float green = rand.nextFloat();
      float blue = rand.nextFloat();
      Color randomColor = new Color(red, green, blue);
      label.setForeground(randomColor);
      add(label);
      s = JOptionPane.showInputDialog(this, "Enter a String");
      label.setText(s);
   }
}

抱歉,这是错误的:

n作为参数传递paint

public void paint(Graphics g, String n) {
...
}

正确的解决方案:

将变量n为类成员:

public class Bucky extends JApplet{
    String n;
    ...
}

"( n 不能解析为变量) "

n不在paint方法的范围内。您需要将其移动为类成员

String n;               <--------
public void ustaw() {
    Scanner input = new Scanner(System.in);
    n = input.next();
    input.close();
}

除此之外,关于GUI程序,您应该了解一件事。它是事件驱动的。组件触发事件,这些事件是其他组件的侦听器。假设按下了一个按钮。按下按钮会向侦听器触发事件,侦听器会在触发事件时提供一些要执行的操作。因此,如果您想从用户那里获得输入,则需要类似文本字段的内容。您需要将侦听器注册到该文本字段,侦听器将说出要执行的操作。请参阅下面的示例,我只是使用了您输入的文本字段的示例,当您按 Enter 时,面板会绘制字符串

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import stackoverflow.Bucky.DrawPanel;
import templates.GUI;
public class BuckyGUI {
    String n = "Hello";
    JTextField jtf = new JTextField(15);
    BuckyPanel panel = new BuckyPanel();
    public BuckyGUI() {

        JFrame frame = new JFrame();
        frame.add(panel, BorderLayout.CENTER);
        frame.add(jtf, BorderLayout.NORTH);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
        jtf.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                n = jtf.getText();
                panel.repaint();
            }
        });
    }
    public class BuckyPanel extends JPanel{
        private static final int D_W = 250;
        private static final int D_H = 250;
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawString(n, 125, 125);
        }
        public Dimension getPreferredSize() {
            return new Dimension(D_W, D_H);
        }
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new BuckyGUI();
            }
        });
    }
}

相关内容

  • 没有找到相关文章