我想创建一个可以添加到我的java swing应用程序的对象。
实例化时的对象将包含一个图像和2个标签 - 有没有办法使用java swing执行此操作?
如果有 - 你可以给我一个例子。
我想要
Myobj icon = new MyObj(图片,标签,标签);
window.addComponent(图标);
干杯
安迪
答案 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);
}
}
可生产
答案 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一样..我有一个,但我把它转换为缩放图像面板。 。上面有缩放图层。
如果您需要,我会在这里发布。
希望这有帮助,
亚当。