C.Moore
C.Moore

Reputation: 11

Cannot display image icon

I have to display images using the fly weight pattern, I can't get the images to print to screen, here's the code that demonstrates the problem.

    public void draw(Graphics g, int tx, int ty, String name) {
       grem.paintIcon(null, g, tx, ty);
        g.drawString(name, tx, ty + H + 15 );
         ImageIcon grem = new ImageIcon("../images/grem.png");
    }

/// next class that calls the above class

 public void paint(Graphics g) {
        Folder folderIcon;
        String name;

        int j = 0;      //count number in row
        int row = Top;  //start in upper left
        int x = Left;

        //go through all the names and folders
        for (int i = 0; i< names.size(); i++) {
            name = (String)names.elementAt(i);
            if (name.equals(selectedName))
                folderIcon = fact.getFolder(true);
            else
                folderIcon = fact.getFolder(false);
            //have that folder draw itself at this spot
            folderIcon.paint(g);

            x = x + HSpace;    //change to next posn
            j++;
            if (j >= HCount) { //reset for next row
                j = 0;
                row += VSpace;
                x = Left;
            }
        }
    }

Upvotes: 1

Views: 116

Answers (3)

C.Moore
C.Moore

Reputation: 11

public class Gremlin extends JFrame implements ActionListener {

String names[] = {"Andy","Bill","Bob","Dan","Eugene","Frank","Gary","Harry","Ian","Jack",
        "Killlian","Liam","Mark","Nial","Obi","Phil","Richard","Stephan","Terry","Viny",};   // 20 names

public Icon img = new ImageIcon("grem1.jpg");
public JLabel grem = new JLabel(img);
JLabel bigLabel = new JLabel();
JLabel grem2 = new JLabel("New Gremlin");

public JPanel panel2 = new JPanel();
JPanel panel = new JPanel();

public Gremlin() {



    JButton button = new JButton("Add Gremlin");

    this.add(panel);



    panel.setLayout(new GridLayout(9,6));

    panel.add(panel2);
    panel2.add(button);
    for(int i = 0; i<20; i++){
        bigLabel.add(grem = new JLabel(names[i]), panel.add(grem = new JLabel(img)));
        panel.add(bigLabel);    

    }
    button.addActionListener(this);

    setSize(550,600);
    setLocationRelativeTo(null);
    setVisible(true);
}

public static void main(String[] args) {
    Gremlin frame = new Gremlin();
}

@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    if(e.getSource() != null ){
        System.out.println("add a Gremlin");

        panel.add(grem = new JLabel("NEW GREMLIN"), panel.add(grem = new JLabel(img))); 
        revalidate();
    }
}

}

Upvotes: 0

camickr
camickr

Reputation: 324118

  1. Don't override paint(). Custom painting is done by overriding paintComponent().

  2. Don't do I/O in a painting method. You can't control when Swing will repaint a component so you don't want to read images in the painting method. The images should be read in the constructor of your class.

  3. Override the getPreferredSize(...) method to return the size of your component, otherwise the size of the component will be (0, 0) so there may be nothing to paint (depending on the layout manager being used.

  4. If you need more help the post a proper SSCCE that demonstrates the problem because we don't know the context of how your code is being used and don't have time to spend guessing what you may or may not be doing.

Read the section from the Swing tutorial on Custom Painting for more information. Also, instead of doing custom painting you could also use a JList to display the Icon in a grid pattern. Check out the table of contents for the tutorial link to find the section on How to Use Lists for more information.

Upvotes: 1

2D3D
2D3D

Reputation: 353

Maybe the null is the problem : it should be something like this if im not mistaken

  class MyComponent extends JComponent {
  public void paint(Graphics g) {

    ImageIcon icon = new ImageIcon("a.png");
    int x = 0;
    int y = 100;
    icon.paintIcon(this, g, x, y);
  }

Upvotes: 0

Related Questions