Группировка объектов качелей - PullRequest
1 голос
/ 24 мая 2010

Я хочу создать объект, который можно добавить в мое приложение Java Swing.

Объект при создании экземпляра будет содержать изображение и 2 метки - есть ли способ сделать это с помощью Java Swing?

Если есть - можете ли вы указать мне пример.

То есть я хочу

Значок Myobj = новый MyObj (рис., Метка, метка);

окно.addComponent (значок);

Приветствия

Энди

Ответы [ 6 ]

4 голосов
/ 24 мая 2010

Обычно это делается путем подкассирования JPanel и создания в конструкторе 3 меток (1 для изображения) и добавления их на панель с помощью подходящего менеджера компоновки .

3 голосов
/ 24 мая 2010

Создайте класс MyObj и позвольте ему extend JPanel. В конструкторе MyObj вы вызываете setLayout(new BorderLayout()) или любой другой макет, который вы предпочитаете. Затем сделайте, например, add(pic, BorderLayout.NORTH); add(label1, BorderLayout.WEST); add(label2, BorderLayout.EAST);.

Тогда вы сможете сделать window.add(new MyObj(pic, label1, label2)).

import java.awt.*;

class MyObj extends JPanel {
    public MyComponent(ImageIcon pic, String label1, String label2) {
        setLayout(new BorderLayout());
        add(new JLabel(label1), BorderLayout.NORTH);
        add(new JLabel(pic), BorderLayout.CENTER);
        add(new JLabel(label2), BorderLayout.SOUTH);
    }
}

public class FrameTest {
    public static void main(String[] args) {
        JFrame jf = new JFrame("Demo");
        jf.add(new MyObj(new ImageIcon("duke.jpg"), "Label 1", "Label 2"));
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.pack();
        jf.setVisible(true);
    }
}

Производит

enter image description here

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

Как-то так?

изображение с двумя метками http://img297.imageshack.us/img297/5223/capturadepantalla201005i.png

Я создал подкласс JPanel, и в его конструкторе я расположил компоненты так, чтобы их можно было использовать именно так, как вы думали:

ImageAndLabels demo = new ImageAndLabels("image.png", "labelOne", "labelTwo");
window.add( demo );

Вот полный исходный код этого окна.Может помочь вам начать.

import javax.swing.*;
import java.awt.Font;
public class ImageAndLabels extends JPanel {
    public static void main( String [] args ) {
        JFrame frame = new JFrame("image and labels");

        frame.add( new ImageAndLabels("./logo.png", // logo
           "Grouping swing objects",                // label 1
           "<html>Hey.<br>"                         // label 2
           +"I want to make an object I can add to my java swing application.<br>"
           +"The object when instantiated would contain an image and 2 labels - "
           +"is there a way to do this using java swing?</html>") );

        frame.pack();
        frame.setVisible( true );
    }


    public ImageAndLabels( String imageURL, String textOne, String textTwo ) {
        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
        add( new JLabel( new ImageIcon(imageURL )));
        add( new JLabel( textOne ){{
            setFont( new Font("Arial",  Font.BOLD, 20));
        }});
        add( new JLabel( textTwo ));        

    }
}
1 голос
/ 24 мая 2010

Прочтите раздел из учебника по Swing на Использование менеджеров по макету .Используйте соответствующий менеджер компоновки для компоновки компонентов по вашему желанию.Затем добавьте компоненты в JPanel.

1 голос
/ 24 мая 2010

Вы можете добавить несколько компонентов Swing к некоторому компоненту контейнера - обычно JPanel:

JPanel panel = new JPanel(new SomeLayoutYouLike());
panel.add(..);
panel.add(..);
0 голосов
/ 24 мая 2010

ну, главное, что нужно сделать, это избежать создания экземпляров ваших объектов с параметрами ...

, например: (лучше не делать этого, если эти переменные не являются обязательными для создания объекта)

MyFrame(Object o1, Object o2...)

для целей сериализации вы бы предпочли использовать пустой конструктор, а для установки внешних значений вне кадра (в данном случае), таким образом, вы никогда не перепутаете вещи ... и избегаетемного отладки NullPointerException, позже, если вы будете использовать сериализацию.

, если вы хотите проектировать компоненты, вы должны использовать NetBeans, очень простой, очень удобный для пользователя, позволяющий выравнивать и размещать ваши метки, как для ImagePanel... У меня был один, но я преобразовал его в масштабируемую панель изображений ... с масштабированными слоями поверх него.

Если вам нужно, я опубликую его здесь.

Надеюсь, это поможет,

Адам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...