[英]how to use jpanel with paint (or repaint)
我是油漆/圖形的新手,並想知道如何將JPanel添加到我的代碼中,使得整個圖形將在JPanel而不是JFrame上。
換句話說,我正在嘗試創建一個允許我這樣做的GUI:在右側顯示LEFT側JPanel上線條的良好移動,添加將顯示的JTextArea(在JPanel上)圖形的協調。
謝謝!!!
(下圖,移動線或只是運行代碼)
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
,建立一個調用repaint()
的ActionListener
。 從Swing Timer
調用它。 JComponent
或JPanel
BufferedImage
繪制並將其添加到JLabel
的ImageIcon
。 JComponent
如果需要則使用JPanel
。 對於其中一個, 重寫paintComponent(Graphics)
而不是paint(Graphics)
。 BufferedImage
可能是這個用例的更好選擇,因為它似乎是動畫(假設是故意持續的)一系列行。 setBounds
! 相反,將首選大小設置為自定義組件,為文本區域的構造函數使用合理值,並將它們與布局(以及適當的填充和邊框)組合,然后在添加所有組件后在框架上調用pack()
。 Thread
啟動之前調用repaint()
則會有一個NPE。 ..問題是什么? 哦,對,如果可以推斷出問題是“如何將其他組件與自定義繪制的組件結合起來?” - 使用嵌套布局。 請參閱嵌套布局示例 。
如果使用BufferedImage
作為后備存儲,您可以將其放置在該示例中的圖像中,除了您將遺漏JTable
以及JSplitPane
。
閱讀自定義繪畫的Swing教程,了解正確的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.