Java 创建可以具有不同显示的零部件
我正在尝试用java创建自己的图形组件。 我希望他能有不同类型的展示:Java 创建可以具有不同显示的零部件,java,swing,Java,Swing,我正在尝试用java创建自己的图形组件。 我希望他能有不同类型的展示: 一个显示JPanel的显示器,中间包含一个JLabel(图1) 用GridLayout(3,3)表示JPanel的显示器。在这个JPanel中,将有9个JPanel。其中一些可能在中间包含JLabel(图2和图3) 所以我想知道如何继续:我应该扩展JComponent还是JPanel。。? 我还希望能够从一个显示转到另一个显示,即,在执行操作之后,能够通过简单的方法调用来修改组件的视图 我还没有一个代码,我只是在寻找一
我还没有一个代码,我只是在寻找一个轨道开始这门课。提前谢谢你 实现这一点的一种方法是创建自己的JPanel并使用它 请参见下面的一个小示例:
public class MyPanel extends JPanel{
final static String PANEL1 = "p1";
final static String PANEL2 = "p2";
public MyPanel(){
super();
this.setLayout(new CardLayout());
this.add(getFirstDisplay(),PANEL1);
this.add(getSecondDisplay(),PANEL2);
}
private JPanel getFirstDisplay() {
JPanel p = new JPanel();
p.add(new JLabel("9"));
return p;
}
private JPanel getSecondDisplay() {
JPanel p = new JPanel();
p.setLayout(new GridLayout(3, 3));
int counter = 1;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
p.add(new JLabel(""+counter));
counter++;
}
}
return p;
}
public void loadPanel(String name) {
CardLayout cl = (CardLayout)(this.getLayout());
cl.show(this, name);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Sample");
frame.setSize(400, 400);
MyPanel myPanel = new MyPanel();
JButton b1 = new JButton("show 1");
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
myPanel.loadPanel(PANEL1);
}
});
JButton b2 = new JButton("show 2");
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
myPanel.loadPanel(PANEL2);
}
});
JPanel bot = new JPanel();
bot.setLayout(new GridLayout(1,2));
bot.add(b1);
bot.add(b2);
frame.setLayout(new BorderLayout());
frame.add(myPanel, BorderLayout.CENTER);
frame.add(bot, BorderLayout.SOUTH);
frame.setVisible(true);
}
}
公共类MyPanel扩展了JPanel{
最终静态字符串PANEL1=“p1”;
最终静态字符串PANEL2=“p2”;
公共事务委员会(){
超级();
此.setLayout(新的CardLayout());
add(getFirstDisplay(),PANEL1);
add(getSecondDisplay(),PANEL2);
}
私有JPanel getFirstDisplay(){
JPanel p=新的JPanel();
p、 添加(新的JLabel(“9”));
返回p;
}
私有JPanel getSecondDisplay(){
JPanel p=新的JPanel();
p、 setLayout(新的GridLayout(3,3));
int计数器=1;
对于(int i=0;i<3;i++){
对于(int j=0;j<3;j++){
p、 添加(新JLabel(“+计数器”);
计数器++;
}
}
返回p;
}
公共void加载面板(字符串名称){
CardLayout cl=(CardLayout)(this.getLayout());
cl.show(此,名称);
}
公共静态void main(字符串[]args){
JFrame=新JFrame(“样本”);
框架。设置尺寸(400400);
MyPanel MyPanel=新建MyPanel();
JButton b1=新JButton(“显示1”);
b1.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
myPanel.loadPanel(面板1);
}
});
JButton b2=新JButton(“显示2”);
b2.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
myPanel.loadPanel(面板2);
}
});
JPanel bot=新的JPanel();
bot.setLayout(新网格布局(1,2));
添加(b1);
bot.add(b2);
frame.setLayout(新的BorderLayout());
frame.add(myPanel,BorderLayout.CENTER);
框架。添加(机器人,边界布局。南部);
frame.setVisible(true);
}
}
它创建了一个:
“所以我想知道如何继续:我应该扩展JComponent还是JPanel?”-这在很大程度上取决于您希望如何管理代码。例如,您可以通过工厂方法简单地创建面板,工厂方法只是实例化JPanel
并设置组件。如果标签/组件需要其他功能(如监视鼠标),那么定制组件可能是合适的,因为它封装了功能并使其更易于重用。你也应该考虑是否有“共同”的功能,它们都是共享的,“我也希望能够从一个显示器到另一个显示器,也就是说,执行一个动作”——然后我建议看一下<代码>卡布局>代码>,这样你就可以轻松地在不同的视图之间切换。