Following is my program i need to add scroll to jframe and I have paint method in it
package other;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.ScrollPane;
import java.awt.Stroke;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Line2D;
import javax.swing.*;
public class MainDrawCycle extends JPanel implements ActionListener
{
JButton button;
JLabel label;
JTextField textField;
JScrollPane pane;
JPanel panel;
JFrame frame;
Container c;
static int val;
int xa,ya,xb,yb,x1,y1;
int xc,yc,xd,yd,xe,ye,xf,yf;
int lsb=0,msb=7;
char val1='A',val2='B';
// public MainDrawCycle(JFrame f)
// {
// pane=new //JScrollPane(f,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
// add(pane);
// }
public MainDrawCycle()
{
setLayout(null);
//frame=new JFrame();
// panel=new JPanel();
// pane=new //JScrollPane(panel,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
textField=new JTextField();
label=new JLabel("Enter Clock value: ");
button=new JButton("Ok");
System.out.println("in const");
label.setBounds(300,550,80,20);
textField.setBounds(410,550,50,20);
button.setBounds(480,550,70,20);
//add(pane);
add(button);
add(textField);
add(label);
button.addActionListener(this);
}
public void paint(Graphics g)
{
xa=50;ya=60;xb=100;yb=60;x1=100;y1=520;
xc=100;yc=60;xd=100;yd=100;xe=100;ye=100;xf=150;yf=100;
g.setColor(Color.black);
g.drawLine(50,50,50,y1); //Y axis
//g.drawLine(20,500,x1,500); //X axis
g.drawString("CLK",xa-40 ,ya);
g.drawString("DATA", xa-40, 300);
g.drawString("["+msb+":"+lsb+"]", xa-40, 310);
Graphics2D g2d = (Graphics2D)g;
Stroke stroke=new BasicStroke(1f, BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL,1f, new float[] {2f}, 0f);
Stroke drawingStroke = new BasicStroke(2);
for(int i=1;i<=val;i++)
{
g2d.setStroke(stroke);
Line2D line = new Line2D.Double(xb,yb,xb,500);
g2d.draw (line);
Line2D line2 = new Line2D.Double(xf,yf-50,xf,500);
g2d.draw (line2);
g2d.setStroke(drawingStroke);
if(x1
1. Post your code in [CODE] tags so we can read it.
2. frame.getContentPane().add(pane); the getContentPane() hasn't been required since Java 1.5
3. Never override paint(), override paintComponent instead.
4. Because your custom JPanel has no components in it Swing doesn't know how big it is, and probably has its size as 0,0 So the scroll pane won't do much. You may do better by setting your panel's size to a suitable value
Thank u very much
but i cant get how to use "frame.getContentPane().add(pane)"
I have jdk 1.6 version.
I was trying but still it is not working ..
It only show me scroll bar on frame but not working
can you pl's run my code...
Thank you...
Sorry, I don't have time to run your code today. What exactly do you mean by "but not working"? Specify what you expected to see and what you actually saw.
Yes i know that but still i didn't see the scroll bar on jframe...
there are three possible issues
- contents Size that you put ot the JScrollPane is lover than JViewPort View
- you nothing put to the JScrollPane
- change XXX_SCROLLBAR_AS_NEEDED to XXX_SCROLLBAR_AS_ALLWAYS
public static void main(String[] args)
{
JFrame frame = new JFrame();
JScrollPane pane=new JScrollPane(new MainDrawCycle(),JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
frame.getContentPane().add(pane);
// new MainDrawCycle(frame);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(900,700);
frame.setVisible(true);
this size i set
Again I post my program but still scroll bar didn't added
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.ScrollPane;
import java.awt.Stroke;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Line2D;
import javax.swing.*;
public class MainDrawCycle extends JPanel implements ActionListener,Runnable
{
JButton button;
JLabel label;
JTextField textField;
JScrollPane pane;
JPanel panel;
JFrame frame;
Container c;
static int val;
int xa,ya,xb,yb,x1,y1;
int xc,yc,xd,yd,xe,ye,xf,yf;
int lsb=0,msb=7;
char val1='A',val2='B';
Thread runner=null;
public MainDrawCycle()
{
setLayout(null);
//setSize(600,600);
setBackground(Color.green);
textField=new JTextField();
label=new JLabel("Enter Clock value: ");
button=new JButton("Ok");
System.out.println("in const");
label.setBounds(280,550,120,20);
textField.setBounds(410,550,50,20);
button.setBounds(480,550,70,20);
add(button);
add(textField);
add(label);
button.addActionListener(this);
}
public void paintComponent(Graphics g)
{
xa=50;ya=60;xb=100;yb=60;x1=100;y1=520;
xc=100;yc=60;xd=100;yd=100;xe=100;ye=100;xf=150;yf=100;
Font f=new Font("serif", Font.BOLD,15);
g.setColor(Color.black);
g.drawLine(50,50,50,y1); // Draw Y axis.
g.drawString("CLK",xa-40 ,ya);
g.drawString("DATA", xa-40, 300);
g.drawString("["+msb+":"+lsb+"]", xa-40, 312);
g.setFont(f);
g.setColor(Color.red);
g.drawString("Timing Analysis", 400, 12);
Graphics2D g2d = (Graphics2D)g;
Stroke stroke=new BasicStroke(1f, BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL,1f, new float[] {2f}, 0f);
Stroke drawingStroke = new BasicStroke(2);
for(int i=1;i<=val;i++)
{
g2d.setColor(Color.black);
g2d.setStroke(stroke);
Line2D line = new Line2D.Double(xb,yb,xb,500);
g2d.draw (line);
Line2D line2 = new Line2D.Double(xf,yf-50,xf,500);
g2d.draw (line2);
g2d.setStroke(drawingStroke);
if(x1<xf)
{
x1=xf;
g.setColor(Color.black);
g.drawLine(20,500,x1,500); //Draw X axis.
}
g.drawString("t "+i,xa+30,ya-10);
g.setColor(Color.blue);
g.drawLine(xa,ya,xb,yb); //h1
g.setColor(Color.blue);
g.drawLine(xc,yc,xd,yd); //v1
g.setColor(Color.blue);
g.drawLine(xe,ye,xf,yf); //h2
if(i%2==0)
g.drawString(""+val1,(xa+xf)/2, 300);
else
g.drawString(""+val2,(xa+xf)/2 , 300);
g.drawLine(xa, 300, (xa+xb)/2, 275);
g.drawLine((xa+xb)/2, 275, (xd+xf)/2, 275);
g.drawLine((xd+xf)/2, 275, xf, 300);
g.drawLine((xa+xb)/2, 325, (xd+xf)/2, 325);
g.drawLine(xa, 300, (xa+xb)/2, 325);
g.drawLine((xd+xf)/2, 325, xf, 300);
xa=xf;
ya=ya;
xb=xe+100;
yb=yb;
xc=xb;
yc=yb;
xd=xf+50;
yd=yf;
xe=xd;
ye=yd;
xf=xe+50;
yf=yf;
}
}
public static void main(String[] args)
{
JFrame frame = new JFrame();
JScrollPane pane=new JScrollPane(new MainDrawCycle(),JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
frame.getContentPane().add(pane);
// new MainDrawCycle(frame);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setExtendedState(frame.MAXIMIZED_BOTH);
//frame.setSize(900,700);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button)
{
val=Integer.parseInt(textField.getText());
repaint();
}
}
@Override
public void run() {
// lower ThreadPriority
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
// run a long while (true) this means in our case "always"
while (true)
{
// repaint the applet
repaint();
try
{
// Stop thread for 20 milliseconds
Thread.sleep (100);
}
catch (InterruptedException ex)
{
// do nothing
}
// set ThreadPriority to maximum value
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
// TODO Auto-generated method stub
// while(runner!=null)
// repaint();
// try
// {
// Thread.sleep(100);
// }catch(InterruptedException i)
// {
// System.out.println(i.getMessage());
// }
}
public void start()
{
if(runner==null)
{
runner=new Thread(this);
runner.start();
}
}
}Again I post my program but still scroll bar didn't added
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.ScrollPane;
import java.awt.Stroke;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Line2D;
import javax.swing.*;
public class MainDrawCycle extends JPanel implements ActionListener,Runnable
{
JButton button;
JLabel label;
JTextField textField;
JScrollPane pane;
JPanel panel;
JFrame frame;
Container c;
static int val;
int xa,ya,xb,yb,x1,y1;
int xc,yc,xd,yd,xe,ye,xf,yf;
int lsb=0,msb=7;
char val1='A',val2='B';
Thread runner=null;
public MainDrawCycle()
{
setLayout(null);
//setSize(600,600);
setBackground(Color.green);
textField=new JTextField();
label=new JLabel("Enter Clock value: ");
button=new JButton("Ok");
System.out.println("in const");
label.setBounds(280,550,120,20);
textField.setBounds(410,550,50,20);
button.setBounds(480,550,70,20);
add(button);
add(textField);
add(label);
button.addActionListener(this);
}
public void paintComponent(Graphics g)
{
xa=50;ya=60;xb=100;yb=60;x1=100;y1=520;
xc=100;yc=60;xd=100;yd=100;xe=100;ye=100;xf=150;yf=100;
Font f=new Font("serif", Font.BOLD,15);
g.setColor(Color.black);
g.drawLine(50,50,50,y1); // Draw Y axis.
g.drawString("CLK",xa-40 ,ya);
g.drawString("DATA", xa-40, 300);
g.drawString("["+msb+":"+lsb+"]", xa-40, 312);
g.setFont(f);
g.setColor(Color.red);
g.drawString("Timing Analysis", 400, 12);
Graphics2D g2d = (Graphics2D)g;
Stroke stroke=new BasicStroke(1f, BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL,1f, new float[] {2f}, 0f);
Stroke drawingStroke = new BasicStroke(2);
for(int i=1;i<=val;i++)
{
g2d.setColor(Color.black);
g2d.setStroke(stroke);
Line2D line = new Line2D.Double(xb,yb,xb,500);
g2d.draw (line);
Line2D line2 = new Line2D.Double(xf,yf-50,xf,500);
g2d.draw (line2);
g2d.setStroke(drawingStroke);
if(x1<xf)
{
x1=xf;
g.setColor(Color.black);
g.drawLine(20,500,x1,500); //Draw X axis.
}
g.drawString("t "+i,xa+30,ya-10);
g.setColor(Color.blue);
g.drawLine(xa,ya,xb,yb); //h1
g.setColor(Color.blue);
g.drawLine(xc,yc,xd,yd); //v1
g.setColor(Color.blue);
g.drawLine(xe,ye,xf,yf); //h2
if(i%2==0)
g.drawString(""+val1,(xa+xf)/2, 300);
else
g.drawString(""+val2,(xa+xf)/2 , 300);
g.drawLine(xa, 300, (xa+xb)/2, 275);
g.drawLine((xa+xb)/2, 275, (xd+xf)/2, 275);
g.drawLine((xd+xf)/2, 275, xf, 300);
g.drawLine((xa+xb)/2, 325, (xd+xf)/2, 325);
g.drawLine(xa, 300, (xa+xb)/2, 325);
g.drawLine((xd+xf)/2, 325, xf, 300);
xa=xf;
ya=ya;
xb=xe+100;
yb=yb;
xc=xb;
yc=yb;
xd=xf+50;
yd=yf;
xe=xd;
ye=yd;
xf=xe+50;
yf=yf;
}
}
public static void main(String[] args)
{
JFrame frame = new JFrame();
JScrollPane pane=new JScrollPane(new MainDrawCycle(),JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
frame.getContentPane().add(pane);
// new MainDrawCycle(frame);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setExtendedState(frame.MAXIMIZED_BOTH);
//frame.setSize(900,700);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button)
{
val=Integer.parseInt(textField.getText());
repaint();
}
}
@Override
public void run() {
// lower ThreadPriority
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
// run a long while (true) this means in our case "always"
while (true)
{
// repaint the applet
repaint();
try
{
// Stop thread for 20 milliseconds
Thread.sleep (100);
}
catch (InterruptedException ex)
{
// do nothing
}
// set ThreadPriority to maximum value
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
// TODO Auto-generated method stub
// while(runner!=null)
// repaint();
// try
// {
// Thread.sleep(100);
// }catch(InterruptedException i)
// {
// System.out.println(i.getMessage());
// }
}
public void start()
{
if(runner==null)
{
runner=new Thread(this);
runner.start();
}
}
}One last time: What sizes did you set? - specifically for the panel where you overrode paintComponent?
Again i post my code and set panel size and frame size as mentioned in bold tag
public class MainDrawCycle extends JPanel implements ActionListener,Runnable
{
JButton button;
JLabel label;
JTextField textField;
JScrollPane pane;
JPanel panel;
JFrame frame;
Container c;
static int val;
int xa,ya,xb,yb,x1,y1;
int xc,yc,xd,yd,xe,ye,xf,yf;
int lsb=0,msb=7;
int maxValue=20;
char val1='A',val2='B';
Thread runner=null;
JComboBox cmb;
public MainDrawCycle()
{
setLayout(null);
//setSize(900,700);
//setBackground(Color.green);
textField=new JTextField();
label=new JLabel("Enter Clock value: ");
button=new JButton("Ok");
cmb=new JComboBox();
cmb.addItem("50");
cmb.addItem("100");
System.out.println("in const");
label.setBounds(280,550,120,20);
textField.setBounds(410,550,50,25);
button.setBounds(480,550,70,25);
<strong> this.setBounds(0,0,800,600);</strong>
cmb.setBounds(410,580,70,25);
add(button);
add(textField);
add(label);
add(cmb);
button.addActionListener(this);
}
public void paintComponent(Graphics g)
{
xa=50;ya=60;xb=100;yb=60;x1=100;y1=520;
xc=100;yc=60;xd=100;yd=100;xe=100;ye=100;xf=150;yf=100;
Font f=new Font("serif", Font.BOLD,15);
g.setColor(Color.black);
g.drawLine(50,50,50,y1); // Draw Y axis.
g.drawString("CLK",xa-40 ,ya);
g.drawString("DATA", xa-40, 300);
g.drawString("["+msb+":"+lsb+"]", xa-40, 312);
//g.drawString("Enter clock value :", 300, 560);
g.setFont(f);
g.setColor(Color.red);
g.drawString("Timing Analysis", 500, 12);
Graphics2D g2d = (Graphics2D)g;
Stroke stroke=new BasicStroke(1f, BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL,1f, new float[] {2f}, 0f);
Stroke drawingStroke = new BasicStroke(2);
maxValue++;
for(int i=1;i<=val;i++)
{
g2d.setColor(Color.black);
g2d.setStroke(stroke);
Line2D line = new Line2D.Double(xb,yb,xb,500);
g2d.draw (line);
Line2D line2 = new Line2D.Double(xf,yf-50,xf,500);
g2d.draw (line2);
g2d.setStroke(drawingStroke);
if(x1<xf)
{
x1=xf;
g.setColor(Color.black);
g.drawLine(20,500,x1,500); //Draw X axis.
}
g.drawString("t "+i,xa+30,ya-10);
g.setColor(Color.blue);
g.drawLine(xa,ya,xb,yb); //h1
g.setColor(Color.blue);
g.drawLine(xc,yc,xd,yd); //v1
g.setColor(Color.blue);
g.drawLine(xe,ye,xf,yf); //h2
if(i%2==0)
g.drawString(""+val1,(xa+xf)/2, 300);
else
g.drawString(""+val2,(xa+xf)/2 , 300);
g.drawLine(xa, 300, (xa+xb)/2, 275);
g.drawLine((xa+xb)/2, 275, (xd+xf)/2, 275);
g.drawLine((xd+xf)/2, 275, xf, 300);
g.drawLine((xa+xb)/2, 325, (xd+xf)/2, 325);
g.drawLine(xa, 300, (xa+xb)/2, 325);
g.drawLine((xd+xf)/2, 325, xf, 300);
xa=xf;
ya=ya;
xb=xe+100; //100
yb=yb;
xc=xb;
yc=yb;
xd=xf+50; //50
yd=yf;
xe=xd;
ye=yd;
xf=xe+50; //50
yf=yf;
}
}
public static void main(String[] args)
{
JFrame frame = new JFrame();
JScrollPane pane=new JScrollPane(new MainDrawCycle(),JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
frame.add(pane);
//new MainDrawCycle(frame);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.setExtendedState(frame.MAXIMIZED_BOTH);
<strong> frame.setSize(900,700);</strong>
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button)
{
val=Integer.parseInt(textField.getText());
repaint();
}
if(e.getSource()==cmb)
{
if(cmb.getSelectedItem().toString()=="50")
{
maxValue=50;
}
if(cmb.getSelectedItem().toString()=="100")
{
maxValue=100;
}
}
}
@Override
public void run() {
// lower ThreadPriority
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
// run a long while (true) this means in our case "always"
while (true)
{
// repaint the applet
repaint();
try
{
// Stop thread for 20 milliseconds
Thread.sleep (100);
}
catch (InterruptedException ex)
{
// do nothing
}
// set ThreadPriority to maximum value
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
// TODO Auto-generated method stub
// while(runner!=null)
// repaint();
// try
// {
// Thread.sleep(100);
// }catch(InterruptedException i)
// {
// System.out.println(i.getMessage());
// }
}
public void start()
{
if(runner==null)
{
runner=new Thread(this);
runner.start();
}
}
}That's great! Please now help everybody else here by explaining how you solved it. Thank you.
This is my code
first I setpreffered size of jpanel
after that setpreffred size of frame and in set jpanels prefferder size as parameter
JFrame frame = new JFrame();
frame.setBackground(Color.darkGray);
JPanel jp=new Test();
jp.setPreferredSize(new Dimension(500,500));
JScrollPane pane=new JScrollPane(jp,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
pane.setPreferredSize(jp.getPreferredSize());
frame.add(pane);
Thank u!