嗨 我发了火模拟器与JTextArea的 http://xieu901.webs.com/fire.jarjava的,油漆的JPanel,这是另一种的JPanel里面
现在我想的JPanel或帆布代替的JTextArea,使其(只是想挑战自己^^) 我设法在一个仅在JPanel中JFrame的 绘制的图像,但我不能画在一个JPanel任何在JFrame的中另一个的JPanel
还有什么办法用绘画方法,无需扩展JComponent的? ,我不知道如何创建一个新的Graphics对象
public class gui extends JComponent {
//create gui elements
MigLayout layout= new MigLayout("fillx,filly", "[70%,fill][30%,fill]","");
JLabel status = new JLabel("status");
JTextField sizeoffield = new JTextField();
JButton ok= new JButton("Start");
JButton reset= new JButton("Reset");
JButton update= new JButton("Update");
JPanel mainPanel = new JPanel(layout);
JPanel panel = new JPanel();
JFrame win = new JFrame("my win");
//constructor = create gui
gui(){
win.setVisible(true);
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
win.setBounds(1,1,800,600);
panel.setPreferredSize(panel.getMaximumSize());//wichtig
win.add(mainPanel);
mainPanel.add(panel,"spany 4,align left,aligny top");
mainPanel.add(sizeoffield,"wrap");
mainPanel.add(ok,"wrap,aligny t");
mainPanel.add(reset,"wrap,aligny t");
mainPanel.add(update,"wrap,aligny t");
mainPanel.add(status);
panel.addMouseListener(mouse);
ok.addActionListener(listener);
reset.addActionListener(listener);
update.addActionListener(listener);
}
/*******a long code of mouse/actionlistener and other methods was cut here *******/
//load imageicon to convert to image later
private ImageIcon loadImage(String s) {
java.net.URL imgURL = gui.class.getResource(s);
return new ImageIcon(imgURL);
}
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.drawString("Java 2D", 50, 50);
g2d.drawRoundRect(1, 1, 100, 100, 100, 100);
g2d.setColor(Color.black);
g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
g2d.drawImage(fire,1,1,50,50,null);
}
@Override
public void repaint() {
super.repaint();
}
public static void main(String[] args) {
new gui();
}
}
与上面的代码我有一个正常的JPanel(这应该是黑色的,所以我想用paint方法wasnt)
这里是我的代码是JFrame中的JPanel,它可以工作
package jpanel;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class Panel extends JComponent{ //class Panel
ImageIcon fireicon = loadImage("regen.png");
ImageIcon normalicon = loadImage("regen.png");
ImageIcon regenicon = loadImage("regen.png");
Image fire= fireicon.getImage();
Image normal= normalicon.getImage();
Image regen= regenicon.getImage();
private ImageIcon loadImage(String s) {
java.net.URL imgURL = gui.class.getResource(s);
return new ImageIcon(imgURL);
}
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.drawString("Java 2D", 50, 50);
g2d.drawRoundRect(1, 1, 100, 100, 100, 100);
g2d.setColor(Color.black);
g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
g2d.drawImage(fire,1,1,50,50,null);
}
// @Override
// public void repaint() {
// super.repaint();
// }
public static void main(String[] args) {
JFrame win = new JFrame();
win.add(new Panel());
win.setVisible(true);
win.setSize(400, 400);
}
}
+1“摇摆程序应该重写'paintComponent()'而不是重写'paint()',“http://java.sun.com/products/jfc/tsc/articles/painting/index.html – trashgod 2010-11-21 02:23:29