Java Swing не показывает изменения в источнике - PullRequest
1 голос
/ 07 мая 2010

Я использую графический редактор Java Swing с NetBeans для создания своего проекта ... но его использование влечет за собой некоторые ограничения, например, я не могу добавить к jpanel изображение, используя параметры java swing.Поэтому мне нужно кодировать его, реализуя новую jPanel.

Моя проблема в том, что код, сгенерированный графическим редактором java swing, не может быть отредактирован, поэтому вместо добавления нового кода JPanel в раздел initComponents () я делаю это после вызова этой функции вконструктор моей главной JPanel.

Но любой код, который я добавляю, не распознается «Дизайнером», что означает, что после создания моих закодированных объектов я не могу использовать их в «Дизайнере», и все должно быть закодировано, что является проблемой, учитываянамного проще предварительный просмотр и перемещение элементов в инструменте «Дизайнер».

Как я могу кодировать то, что хочу, но сталь появляется в «DEsigner»?

Заранее спасибо

1 Ответ

2 голосов
/ 07 мая 2010

Вот два способа добавить изображение в JPanel с помощью редактора графического интерфейса пользователя NetBeans. Класс ImagePanel ниже создается с помощью команды New JPanel Form.

Не дизайнер : при первом подходе конструктор устанавливает фоновое изображение, а класс переопределяет paintComponent() для рисования изображения. Код внутри редактора не изменяется.

Дизайнер : при использовании дизайнера графического интерфейса второй подход добавляет JLabel с именем imageLabel. Код для создания JLabel с центрированным Icon входит в свойство с именем Custom Creation Code, а следующие две строки идут в Post-Creation Code.

package overflow;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

public class ImagePanel extends javax.swing.JPanel {

    private Image image;

    /** Creates new form ImagePanel */
    public ImagePanel(Image image) {
        this.image = image;
        this.setPreferredSize(new Dimension(
            image.getWidth(null), image.getHeight(null)));
        initComponents();
    }

    @Override
    protected void paintComponent(Graphics g) {
        g.drawImage(image, 0, 0, null);
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        imageLabel = new JLabel(new ImageIcon("image2.jpg"), JLabel.CENTER);
        imageLabel.setHorizontalTextPosition(JLabel.CENTER);
        imageLabel.setVerticalTextPosition(JLabel.TOP);

        setLayout(new java.awt.GridLayout());

        imageLabel.setText("imageLabel");
        add(imageLabel);
    }// </editor-fold>


    // Variables declaration - do not modify
    private javax.swing.JLabel imageLabel;
    // End of variables declaration

}

Вот подходящий класс Main и метод main() для отображения панели:

package overflow;

import java.awt.EventQueue;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class Main {
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                try {
                    f.add(new ImagePanel(ImageIO.read(new File("image1.jpg"))));
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
                f.pack();
                f.setVisible(true);
            }
        });
    }
}

http://i41.tinypic.com/dmw4nl.png http://i41.tinypic.com/dmw4nl.png

...