繁体   English   中英

在Swing Java中将值打印到变量中

[英]Printing the value in a variable in Swing Java

这是我的程序。 我想打印st变量。 我可以在控制台中打印存储在st中的值。 只需帮助我在某些所需位置在窗口中打印该特定值即可。 我尝试使用drawString和Jlabel概念,但显示一些警告。

import java.awt.Graphics;
import java.io.*;
import java.io.FileNotFoundException;
import java.util.Scanner;
import javax.swing.JComponent;
import javax.swing.JFrame;
//import javax.swing.JLabel;
//import javax.swing.JPanel;
class MyCanvas extends JComponent {
    private static final long serialVersionUID = 1L;
    //String st="hi";
    public void ScanXan() throws FileNotFoundException{
        try (Scanner s = new Scanner(new BufferedReader(new FileReader("serialdata.txt")))) 
        {
            s.useDelimiter("�");//Delimter defination
            while (s.hasNext())
            {
                String st= s.next(); 
                //Thread.sleep(1000);
                System.out.println(st);
            }
        }
    }
    @Override
        public void paint(Graphics g) {
            g.drawString("OLD AGE PEOPLE HEALTH ASSISTANT SYSTEM",600,100);//title
            g.drawString("AC BED ROOM 1",480,160);//upper room name 
            g.drawString("AC BED ROOM 2",480,410);//lower room name
            g.drawString("HALL",920,160);//hall name

            g.drawRect (450, 130, 600, 500);//largest rectangle

            g.drawRect (350, 350, 50, 60);//sender node
            g.drawRect (950, 350, 50, 60);//receiver node
            g.drawRect (660, 160, 50, 60);//relay node 1 bed room1 
            g.drawRect (660, 540, 50, 60);//relay node 2 bed room2

            g.drawString("SENDER",350,340);//sender name
            g.drawString("RECEIVER",950,340);//receiver name
            g.drawString("RELAY NODE 1",660,150);//relay node1 name 
            g.drawString("RELAY NODE 2",660,620);//relay node2 name
            //g.drawString(st,650,610);



            g.drawLine(900,130,900,630);//vertical line
            g.drawLine(450,380,900,380);//horizontal line

            //g.drawLine(410,350,660,230);//arrow

            //g.drawOval(400,230,50,50);
            //g.drawOval(60,250,50,50); 
            //g.drawOval(400,230,50,50); 
            //g.drawOval(600,250,50,50);  
            //g.drawLine(350,300,350,800); 
        }

}

public class DrawRect {
    public static void main(String[] a) throws FileNotFoundException {
        MyCanvas mc=new MyCanvas();
        mc.ScanXan();
        //JPanel pane= new JPanel();
        //JLabel text1 = new JLabel();
        //text1.setText(String st);

        JFrame window = new JFrame();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setBounds(30, 30, 300, 300);
        window.getContentPane().add(new MyCanvas());
        window.setVisible(true);
    }
}

在讨论如何打破Swing的绘制链之前,您需要问自己一个问题:鉴于paint方法被调用,您的paint方法如何知道有关您要打印的值的任何信息通过API的一部分,您无法控制...

有关更多详细信息,请参见“ AWT中的绘画”和“摇摆执行自定义绘画

你可以...

使用JTextArea ...

public class MyCanvas extends JComponent {

    private static final long serialVersionUID = 1L;

    private JTextArea ta;

    public void ScanXan() throws FileNotFoundException {
        setLayout(new BorderLayout());
        ta = new JTextArea();

        add(new JScrollPane(ta));
        try (Scanner s = new Scanner(new BufferedReader(new FileReader("serialdata.txt")))) {
            s.useDelimiter("�");//Delimter defination
            while (s.hasNext()) {
                String st = s.next();
                ta.append(st + "\n");
            }
        }
    }

}

有关更多详细信息,请参见如何使用文本区域

你可以...

使用JList ...

public class MyCanvas extends JComponent {

    private static final long serialVersionUID = 1L;

    private JList list;

    public void ScanXan() throws FileNotFoundException {
        setLayout(new BorderLayout());
        DefaultListModel<String> model = new DefaultListModel<>();
        list = new JList(model);

        add(new JScrollPane(list));
        try (Scanner s = new Scanner(new BufferedReader(new FileReader("serialdata.txt")))) {
            s.useDelimiter("�");//Delimter defination
            while (s.hasNext()) {
                String st = s.next();
                model.addElement(st);
            }
        }
    }

}

有关更多详细信息,请参见如何使用列表

但...

似乎您正在尝试生成某种图表...

因此,相反,您将需要某种方式来保存要打印的值,直到可以调用paintComponent为止,例如,可能会使用java.util.List

public class MyCanvas extends JComponent {

    private List<String> listOfValues;

    public void ScanXan() throws FileNotFoundException {
        listOfValues = new ArrayList<>(25);
        try (Scanner s = new Scanner(new BufferedReader(new FileReader("serialdata.txt")))) {
            s.useDelimiter("�");//Delimter defination
            while (s.hasNext()) {
                String st = s.next();
                listOfValues.add(st);
            }
        }
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        FontMetrics fm = g.getFontMetrics();
        int yPos = 0;
        for (String st : listOfValues) {
            g.drawString(st, 0, yPos + fm.getAscent());
            yPos += fm.getHeight();
        }
    }

}

我已经对代码进行了某些修改。 请提供修改后的代码,以便我可以执行以下操作。

  1. 从文本字段中读取一行。
  2. 将该行以字符串形式存储在旋转窗口中。
  3. 显示该特定值一段时间(例如3秒)
  4. 现在再次更新st变量,并将下一行存储在该变量中。
  5. 再次更新显示的值。
  6. 重复所有操作,直到到达文本文件的末尾。
import java.awt.Graphics;
import java.io.*;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComponent;
import javax.swing.JFrame;
//import javax.swing.JLabel;
//import javax.swing.JTextField;
//import javax.swing.JLabel;
//import javax.swing.JPanel;
class MyCanvas extends JComponent {
private static final long serialVersionUID = 1L;
private String st="";

public void ScanXan() throws FileNotFoundException, InterruptedException{
  try (Scanner s = new Scanner(new BufferedReader(new        FileReader("E:\\tamilselvan\\java \\serialdata.txt")))) {
      //String st;  
      s.useDelimiter("�");//Delimter defination

        while (s.hasNext())
        {
            setSt(s.next()); 
        Thread.sleep(100);
        System.out.println(getSt());
        }

   }
    }

  @Override
  public void paint(Graphics g) {
  g.drawString("OLD AGE PEOPLE HEALTH ASSISTANT SYSTEM",600,100);//title
  g.drawString("AC BED ROOM 1",480,160);//upper room name 
  g.drawString("AC BED ROOM 2",480,410);//lower room name
  g.drawString("HALL",920,160);//hall name

  g.drawRect (450, 130, 600, 500);//largest rectangle

  g.drawRect (350, 350, 50, 60);//sender node
  g.drawRect (950, 350, 50, 60);//receiver node
  g.drawRect (660, 160, 50, 60);//relay node 1 bed room1 
  g.drawRect (660, 540, 50, 60);//relay node 2 bed room2

  g.drawString("SENDER",350,340);//sender name
  g.drawString("RECEIVER",950,340);//receiver name
  g.drawString("RELAY NODE 1",660,150);//relay node1 name 
  g.drawString("RELAY NODE 2",660,620);//relay node2 name
    //String rt="hiiiiiiiiiiiiiii";
    g.drawString(st,650,610);



  g.drawLine(900,130,900,630);//vertical line
  g.drawLine(450,380,900,380);//horizontal line


 }

 /**
 * @return the st
 */
 public String getSt() {
    return st;
 }

/**
 * @param st the st to set
 */
public void setSt(String st) {
    this.st = st;
}

}

public class DrawRect {
/*public void getData(String st)
{
    String st1=st;
}*/  
public static void main(String[] a) throws FileNotFoundException {
MyCanvas mc=new MyCanvas();
    try {
        mc.ScanXan();
    } catch (InterruptedException ex) {
    Logger.getLogger(DrawRect.class.getName()).log(Level.SEVERE, null,       ex);
    }

//JTextField t = new JTextField();
//String s = "Blaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah";

//t.setText(s);
//JPanel pane= new JPanel();

//JLabel text1 = new JLabel();
//text1.setText("hiiiiiiiiiiiiiiiiiiiiiiiiiii");

JFrame window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setBounds(30, 30, 300, 300);
window.getContentPane().add(new MyCanvas());
window.setVisible(true);
}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM