[英]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();
}
}
}
我已经对代码进行了某些修改。 请提供修改后的代码,以便我可以执行以下操作。
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.