This is my program. I want to print the st
variable. I am able to print the value stored in st in the console. 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.
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...
See Painting in AWT and Swing and Performing Custom Painting for more details
Use a 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
...
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...
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);
}}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.