java,绘制Jpanel,它位于另一个Jpanel中
嗨 我用JTextArea做了一个火灾模拟器 http://xieu901.webs.com/fire.jar
现在我想用JPanel或Canvas而不是JTextarea(只想挑战自己^^) 我设法在Jframe中仅用JPanel绘制了一幅图像 但我不能在Jframe中的另一个Jpanel中的Jpanel中绘制任何内容
有没有办法在不使用extends JComponent的情况下使用paint方法? 我不知道如何创建一个新的图形对象
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方法)
这是我的代码,是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 楼答案
谢谢你,我们, 你的代码帮助了我,现在我可以开始真正的工作了^^
# 2 楼答案
否,GUI的图形是由swing创建的。此示例有效,可能会给您一个提示: