分组摆动物体

时间:2010-05-24 18:47:25

标签: java user-interface swing

我想创建一个可以添加到我的java swing应用程序的对象。

实例化时的对象将包含一个图像和2个标签 - 有没有办法使用java swing执行此操作?

如果有 - 你可以给我一个例子。

我想要

Myobj icon = new MyObj(图片,标签,标签);

window.addComponent(图标);

干杯

安迪

6 个答案:

答案 0 :(得分:4)

这通常是通过升级JPanel并在构造函数中创建3个标签(图像为1)并使用合适的layout manager将其添加到面板来完成的。

答案 1 :(得分:3)

创建一个班级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 :(得分:2)

这样的东西?

image with two labels 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 ));        

    }
}

答案 3 :(得分:1)

您可以将多个Swing组件添加到某个容器组件 - 通常是JPanel:

JPanel panel = new JPanel(new SomeLayoutYouLike());
panel.add(..);
panel.add(..);

答案 4 :(得分:1)

阅读Using Layout Managers上的Swing教程中的部分。使用适当的布局管理器根据需要布置组件。然后将组件添加到JPanel。

答案 5 :(得分:0)

好吧,摆动的主要目的是避免使用参数实例化你的对象......

例如:(而不是这样做,除非这些变量对于创建对象是必不可少的)

MyFrame(Object o1, Object o2...)

为了序列化的目的,你宁愿使用一个空构造函数,并在框架的外侧设置外部值(在这种情况下),这样你就不会把事情弄得混乱......并且避免了很多NullPointerException调试,稍后如果你要使用序列化。

如果你想设计组件,你应该使用NetBeans,非常简单,非常用户友好,允许你对齐和定位你的标签,就像ImagePanel一样..我有一个,但我把它转换为缩放图像面板。 。上面有缩放图层。

如果您需要,我会在这里发布。

希望这有帮助,

亚当。