mynameishi
mynameishi

Reputation: 59

Picture and text in same window

This program is supposed to open a window, add a picture, and then add the text "hello world" above the picture. The text appears when i do frame.add(label) and then try to add the picture (like the code shows), but even when I do the opposite and add the picture first I only get a gray schreen. Can anybody show me how I can get both the picture and the text?

  public window(){
    JFrame frame = new JFrame("name");
    JLabel label = new JLabel ("hello world", JLabel.CENTER);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.setSize(600, 400);
    frame.setVisible(true);
    label.setAlignmentX(0);
    label.setAlignmentY(0);
    frame.add(label);
    frame.add(new JLabel(new ImageIcon("file")));;
  }
}

Upvotes: 0

Views: 682

Answers (2)

Joop Eggen
Joop Eggen

Reputation: 109613

A label can have both text and icon, and the relative position can be customized.

JLabel label = new JLabel ("hello world", new ImageIcon("file"), JLabel.CENTER);
label.setVerticalTextPosition(SwingConstants.TOP);
frame.add(label);
//frame.add(new JLabel(new ImageIcon("file")));;

The default layout is BorderLayout, and add(label, BorderLayout.CENTER).

Upvotes: 1

Houssam Badri
Houssam Badri

Reputation: 2509

You should use overlay layout, but it is applicable on JPanel.

So add a JPanel to your frame then apply the layout, finally add the components.

Your code may be like that:

public window(){
    JFrame frame = new JFrame("name");
    JLabel label = new JLabel ("hello world", JLabel.CENTER);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new JPanel() {
      public boolean isOptimizedDrawingEnabled() {
        return false;
      }
    };
    LayoutManager overlay = new OverlayLayout(panel);
    panel.setLayout(overlay);  
    frame.setResizable(false);
    frame.setSize(600, 400);
    frame.setVisible(true);
    label.setAlignmentX(0);
    label.setAlignmentY(0);
    panel.add(label);
    panel.add(new JLabel(new ImageIcon("file"))); 
    frame.add(panel, BorderLayout.CENTER);
  }
}

Upvotes: 1

Related Questions