我有這樣一個簡單的應用程序,其中像RECT 10 20 100 150
這樣的命令在DrawPanel上繪製了一個帶有指定參數的矩形(擴展爲JPanel
)。爲什麼我的繪圖面板,有時繪畫和其他時間沒有,窗口調整大小?
此外,繪製原始之後,將其添加到List<String> cmdList;
,使DrawPanel的
paintComponent(Graphics g)
我遍歷列表,過程的每個命令,並畫出他們每個人。
問題我面臨的是,在繪製幾個形狀之後,調整大小(或最大化)面板變空。並再次調整大小,所有shpaes得到正確。
這是繪製幾個基元后的屏幕截圖。
將窗口稍微向左拉伸後,圖元就消失了。
爲DrawPanel代碼
public class DrawPanel extends JPanel {
private List<String> cmdList;
public final Map<String,Shape> shapes;
public DrawPanel()
{
shapes = new HashMap<String,Shape>();
shapes.put("CIRC", new Circ());
shapes.put("circ", new Circ());
shapes.put("RECT", new Rect());
shapes.put("rect", new Rect());
shapes.put("LINE", new Line());
//... and so on
cmdList = new ArrayList<String>();
}
public void addCmd(String s)
{
cmdList.add(s);
}
public void removeCmd()
{
cmdList.remove(cmdList.size());
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
setBackground(Color.BLACK);
for (int i = 0; i < cmdList.size(); ++i){
StringTokenizer cmdToken = new StringTokenizer(cmdList.get(i));
String cmdShape = cmdToken.nextToken();
int []args = new int[cmdToken.countTokens()];
for(int i1 = 0; cmdToken.hasMoreTokens(); i1++){
args[i1] = Integer.valueOf(cmdToken.nextToken());
}
shapes.get(cmdShape).draw(this, args);
}
}
public void getAndDraw(String cmdShape, int[] args)
{
shapes.get(cmdShape).draw(this, args);
}
public void rect(int x1, int y1, int width, int height)
{
Graphics g = getGraphics();
g.setColor(Color.BLUE);
g.drawRect(x1, y1, width, height);
}
public void circ(int cx, int cy, int radius)
{
Graphics g = getGraphics();
g.setColor(Color.CYAN);
g.drawOval(cx - radius, cy - radius, radius*2, radius*2);
}
}
爲形狀(接口)在大型機使用
public interface Shape {
void draw(DrawPanel dp, int[] data);
}
class Rect implements Shape {
public void draw(DrawPanel dp, int[] data) {
dp.rect(data[0], data[1], data[2], data[3]);
}
}
線(延伸JFrame
),每個後得出的部分碼命令被輸入。
drawPanel.getAndDraw(cmdShape, args);
drawPanel.addCmd(cmd);
爲什麼繪圖面板,有時畫和其他時間沒有,窗口調整大小?
如何獲得穩定的輸出?
注意:如果我遺漏了任何東西,請詢問。
您是否提供SSCCE? – StanislavL 2012-03-12 06:40:35
@StanislavL:SSCCE是一個包含所有相關代碼的文件嗎? – 2012-03-12 06:50:51