2010-11-20 16 views
0

Hallo ich ein Feuer Simulator mit JTextArea http://xieu901.webs.com/fire.jarjava, malen JPanel, die in einem anderen JPanel ist

jetzt gemacht möchte ich es mit JPanel oder Leinwand machen statt JTextArea (will nur mich selbst herauszufordern ^^) ich es geschafft, ein Bild in einem nur JPanel in JFrame zu ziehen, aber ich kann nicht alles in einem JPanel ziehen, die in einem anderen JPanel in JFrame ist

gibt es eine Möglichkeit, die Farbe Methode zu verwenden, ohne sich JComponent? und ich weiß nicht, wie ein neue Graphics-Objekt

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(); 
} 
} 

mit obigem Code erstellen ich eine normale JPanel bekam (das schwarz sein sollte, so dass ich denke, die Farbe Methode ist nicht verwendet)

und hier war mein Code, der JPanel in JFrame, damit ist es funktionierte

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); 
} 
} 

Antwort

2

Nein, die Grafiken für die GUI wird durch Swing erstellt. Dieses Beispiel funktioniert und kann Ihnen einen Hinweis:

public static void main(String... args) { 
    JFrame frame = new JFrame("Test"); 

    JPanel outer = new JPanel(new GridLayout(1, 1)); 
    JPanel inner = new JPanel(new GridLayout(1, 1)); 
    MyComponent component = new MyComponent(); 

    frame.add(outer, BorderLayout.CENTER); 
    outer.add(inner); 
    inner.add(component); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(400, 300); 
    frame.setVisible(true); 
} 

static class MyComponent extends JComponent { 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 

     g.setColor(Color.BLACK); 
     Rectangle r = getBounds(); 
     g.drawRect(r.x + 10, r.y + 10, r.width - 20, r.height - 20); 
    } 
} 
+0

+1 „Swing Programme sollten 'paintComponent()' überschreiben, statt 'paint()', "http://java.sun.com/products/jfc/tsc/articles/painting/index.html – trashgod

0

dank dacwe, Ihr Code hat mir geholfen, jetzt kann ich die eigentliche Arbeit beginnen ^^

alt text

package nad; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.GridLayout; 
import java.awt.Image; 

import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

import jpanel.gui; 

import net.miginfocom.swing.MigLayout; 

    class Componentprobe extends JComponent{ 

    ImageIcon fireicon = loadImage("regen.png"); 
    Image fire= fireicon.getImage(); 

    private ImageIcon loadImage(String s) { 
      java.net.URL imgURL = gui.class.getResource(s); 
      return new ImageIcon(imgURL); 
    } 

    protected void paintComponent(Graphics g) { 
//  super.paintComponent(g); 
// 
//  g.setColor(Color.BLACK); 
//  Rectangle r = getBounds(); 
//  g.drawRect(r.x + 10, r.y + 10, r.width - 20, r.height - 20); 

     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()); 
     for (int i = 0; i < 10; i++) { 
      for (int j = 0; j < 10; j++) { 
       g2d.drawImage(fire,1+i*50,1+j*50,50,50,null); 
      } 
     } 

    } 
    public static void main(String[] args) { 
     JButton button1= new JButton("OK"); 
     JButton button2= new JButton("reset"); 
     JButton button3= new JButton("update"); 

     MigLayout layout= new MigLayout("fillx,filly", "[70%,fill][30%,fill]",""); 
     Componentprobe component = new Componentprobe(); 
     JPanel panel = new JPanel(new GridLayout(1, 1)); //Miglayout or null layout wont work 
     JPanel main= new JPanel(layout); 
     JFrame win = new JFrame("component probe"); 


     win.setVisible(true); 
     win.setSize(400, 400); 

     win.add(main); 
     main.add(panel,"spany 3,aligny top,align left"); 
     panel.setPreferredSize(panel.getMaximumSize());//wichtig 
     panel.add(component); 


     main.add(button1,"wrap,aligny top"); 
     main.add(button2,"wrap,aligny top"); 
     main.add(button3,"aligny t"); 


     win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     win.setSize(400, 300); 
     win.setVisible(true); 
    } 

} 
+0

Froh, geholfen zu haben!" :) – dacwe