Как создать панель изображений и использовать ее в NetBeans? - PullRequest
1 голос
/ 20 апреля 2011

У меня есть класс, который просто расширяет JPanel и переопределяет метод paintComponent как таковой:

@Override
public void paintComponent(Graphics g)
{
    Image img = new ImageIcon("Images/Background1.jpg").getImage();
    g.drawImage(img, 0, 0, null);
}

Я добавил его в палитру NetBeans, но фоновое изображение не отображается ни в редакторе пользовательского интерфейса, ни при запуске программы через NetBeans. Что я делаю неправильно? Я хотел бы иметь эту панель изображений на поддоне.

Ответы [ 2 ]

2 голосов
/ 20 апреля 2011

Если вы рисуете изображение в местоположении (0, 0) и не масштабируете изображение, чтобы уместить его в окне, то нет никакой причины делать пользовательскую рисование.Просто создайте ImageIcon, используя изображение, добавьте изображение в JLabel и добавьте метку к рамке.

Вероятная проблема с выполнением пользовательского рисования заключается в том, что вы не дали компоненту предпочтительный размер, поэтому размер панели равен 0, и рисовать нечего.

Если только вы не являетесьделая масштабирование или другие графические функции на изображении, сделайте его простым и используйте JLabel, и он будет управлять рисованием и размером для вас.

1 голос
/ 20 апреля 2011

См. Этот пример из Чи К. Яп :

// MyPanel.java
//   -- continuing the example of EmptyFrame1.java

/**
 * Our main goal is to add panels to a frame.
 * In swing, panels are extensions of JPanels, and the main
 * method we need to override is the "paintComponent" method:
 *
 *  class MyPanel extends JPanel {
 *    // override the paintComponent method
 *    public void paintComponent(Graphics g) {
 *      super.paintComponent(g);    // calls the default method first!
 *      g.drawString("Hello Panel!", 75, 100); // our own renderings...
 *    } //paintComponent
 *  } //class MyPanel
 *  
 * A JFrame has several layers, but the main one for
 * adding components is called "content pane".
 * We need to get this pane:
 *  Container contentPane = frame.getContentPane();
 * Then add various components to it.  In the present
 * example, we add a JPanel:
 *  contentPane.add( new MyPanel()); 
 **/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

// text panel

class textPanel extends JPanel {
  // override the paintComponent method
  public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawString("Hello Panel!", 75, 100);
  } //paintComponent
} //class textPanel

class MyFrame extends JFrame {
  public MyFrame(String s) {
    // Frame Parameters
    setTitle(s);
    setSize(300,200); // default size is 0,0
    setLocation(10,200); // default is 0,0 (top left corner)

    // Window Listeners
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        dispose();
        System.exit(0);  // exit is still needed after dispose()!
      } //windowClosing
    }); //addWindowLister

    // Add Panels
    Container contentPane = getContentPane();
    contentPane.add(new textPanel());
    contentPane.setBackground(Color.pink);
  } //constructor MyFrame
} //class MyFrame

public class MyPanel {
  public static void main(String[] args) {
    JFrame f = new MyFrame("My Hello Panel!");
    f.setVisible(true); // equivalent to f.show()!
  } //main
} //class MyPanel


/* NOTES:
    WindowAdapter() is class that implements WindowListers
    with null methods for all the 7 methods of WindowListeners!
    It is found in java.awt.event.*.
 */
...