[英]Printing the value in a variable in Swing Java
This is my program. 这是我的程序。 I want to print the
st
variable. 我想打印
st
变量。 I am able to print the value stored in st in the console. 我可以在控制台中打印存储在st中的值。 Just help me in printing that particular value in the winow at some desired positions.
只需帮助我在某些所需位置在窗口中打印该特定值即可。 I have tried to use
drawString
and Jlabel concept but its showing some warnings. 我尝试使用
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);
}
}
Before going into the issues with how you've broken the painting chain of Swing, you need to ask your self the question, how does your paint
method know anything about the values you want to print, given the fact that the paint
method is called by a part of the API you don't have any control over... 在讨论如何打破Swing的绘制链之前,您需要问自己一个问题:鉴于
paint
方法被调用,您的paint
方法如何知道有关您要打印的值的任何信息通过API的一部分,您无法控制...
See Painting in AWT and Swing and Performing Custom Painting for more details 有关更多详细信息,请参见“ AWT中的绘画”和“摇摆和执行自定义绘画 ”
Use a JTextArea
... 使用
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");
}
}
}
}
See How to Use Text Areas for more details... 有关更多详细信息,请参见如何使用文本区域 。
Use a JList
... 使用
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);
}
}
}
}
See How to Use Lists for more details 有关更多详细信息,请参见如何使用列表
It seems that you're trying to generate some kind of diagram... 似乎您正在尝试生成某种图表...
So, instead, you will need someway to hold the values you want to print until paintComponent
can be called, a java.util.List
might do, for example... 因此,相反,您将需要某种方式来保存要打印的值,直到可以调用
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();
}
}
}
I have made certain modification over the code. 我已经对代码进行了某些修改。 Please provide me the modified code so that I can perform the following operation.
请提供修改后的代码,以便我可以执行以下操作。
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.