gpt4 book ai didi

java - 创建一个可以有不同显示的组件

转载 作者:行者123 更新时间:2023-11-30 06:18:44 25 4
gpt4 key购买 nike

我正在尝试用 java 创建我自己的图形组件。我希望他能有不同类型的显示:

  1. 代表 JPanel 的显示,中间包含 JLabel(图 1)
  2. 表示带有 GridLayout (3,3) 的 JPanel 的显示。在这个JPanel中将会有9个JPanel。其中一些可能在中心包含 JLabel(图 2 和 3)。

pic 1

pic 2

pic 3

所以我想知道如何继续:我应该扩展 JComponent 还是 JPanel ..?我还希望能够从一种显示转到另一种显示,即,遵循 actionPerformed,以便能够通过简单的方法调用来修改组件的 View 。

我还没有代码,我只是在寻找开始这个类的轨道。预先感谢您!

最佳答案

实现此目的的一种方法是创建自己的 JPanel 并使用 CardLayout .

请参阅下面的一个小示例:

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);

}

}

它创建的:

View1

View2

关于java - 创建一个可以有不同显示的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48631639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com