I'm a newbie to the paint/graphics and wonder how to add a JPanel to my code in such way that the entire graphics will be on a JPanel and not on the JFrame.
In other words, I'm trying to create a GUI that will allow me to do this: on the RIGHT side show the nice movement of the lines on a JPanel on the LEFT side, add a JTextArea (on a JPanel) that will show the coordination of the graphics.
Thank you!!!
(picture below, moving lines or simply run the code)
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import javax.swing.JFrame;
public class Test extends JFrame implements Runnable
{
private Line2D line;
public Test()
{
super("testing");
this.setBounds( 500, 500, 500, 500 );
this.setVisible( true );
}
public void paint( Graphics g )
{
Graphics2D g2 = (Graphics2D) g;
g2.draw(line);
}
@Override
public void run()
{
int x=50;
while (true)
{
try
{
Thread.sleep( 50 );
line = new Line2D.Float(100+x, 100+x, 250-x, 260+x%2);
x++;
repaint();
if (x==5000)
break;
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
public static void main (String args[])
{
Thread thread = new Thread (new Test());
thread.start();
}
}
Runnable
, establish an ActionListener
that calls repaint()
. Call it from a Swing Timer
. JComponent
or JPanel
BufferedImage
and add that to an ImageIcon
in a JLabel
. JComponent
if you do not need to add further children, or JPanel
if you do. For either, override paintComponent(Graphics)
instead of paint(Graphics)
. BufferedImage
might be a better choice for this use-case, since it seems to be animating a (supposedly intentionally persistant) series of lines. setBounds
! Instead, set a preferred size to the custom component, use sensible values for the constructor of the text area, and combine them with layouts (and appropriate padding and borders), then call pack()
on the frame after all components are added. repaint()
prior to the Thread
starting. ..What was the question? Oh right, if it can be inferred that the question is "How to combine other components with a custom painted component?" - use a nested layout. see the Nested Layout example .
If using a BufferedImage
as backing store, you might place it like the image in that example, except that you would leave out the JTable
above that, as well as the JSplitPane
.
阅读自定义绘画的Swing教程,了解正确的方法。
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.