私のアプリには、いくつかの JPanel (10 以上) があり、それぞれにわずかな変更 (追加のボタン、ラベルなど) があります。
したがって、私の考えは、共通の要素(3つのボタン、3つのラベル、3つのテキストフィールド-それらは同じ場所のすべてのパネルにあり、もちろん異なるデータがあります)を持つPanelクラスを作成することでした-以下の私の例では、1つのボタン、1つのラベルのみおよび 1 つのテキストフィールド。
そして、私のメインクラスでは、私が手動で作成したこのパネルのように、ラベルの名前を変更し、テキストフィールドに値を設定したいと思います:
p1.btn1.setText("TEST");
私の説明を理解していただければ幸いです..ありがとう。
これを正しく行うための最良の方法は何ですか?
私がこれまでに行ったこと:
public class Main {
JFrame f;
Panel1 p1;
Panel2 p2;
Panel3 p3;
JButton btn2, btn3;
JPanel panel2, panel3;
JLabel lblSpeed2, lblSpeed3;
JTextField txtSpeed2, txtSpeed3;
public Main() {
f = new JFrame();
f.setSize(500, 500);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationRelativeTo(null);
f.setVisible(true);
p1 = new Panel1();
p2 = new Panel2(btn2, panel2, lblSpeed2, txtSpeed2, "Panel no. 2");
p3 = new Panel3(btn3, panel3, lblSpeed3, txtSpeed3, "Panel no. 3");
f.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(5, 5, 5, 5);
c.gridx = 0;
c.gridy = 0;
c.weightx = 0.0;
c.weighty = 0.0;
c.gridx = 0;
c.gridy = 0;
f.add(p1, c);
c.gridx = 0;
c.gridy = 1;
f.add(p2, c);
c.gridx = 0;
c.gridy = 2;
f.add(p3, c);
p1.btn1.setText("TEST");
}
public static void main(String[] args) {
Main m = new Main();
}
}
手動で作成したパネル:
public class Panel1 extends JPanel {
JButton btn1;
JPanel panel1;
JLabel lblSpeed1;
JTextField txtSpeed1;
Border blackline;
public Panel1() {
super();
blackline = BorderFactory.createLineBorder(Color.gray);
panel1 = new JPanel(new GridBagLayout());
panel1.setBorder(blackline);
panel1.setBorder(BorderFactory
.createTitledBorder("Manually created Panel"));
btn1 = new JButton("Btn 1");
lblSpeed1 = new JLabel("Speed");
txtSpeed1 = new JTextField(5);
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(5, 5, 5, 5);
c.gridx = 0;
c.gridy = 0;
c.weightx = 0.0;
c.weighty = 0.0;
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 4;
panel1.add(btn1, c);
c.gridwidth = 1;
c.gridx = 0;
c.gridy = 1;
panel1.add(lblSpeed1, c);
c.gridx = 1;
c.gridy = 1;
panel1.add(txtSpeed1, c);
add(panel1);
}
}
別のパネルのテンプレート:
public class Panel extends JPanel {
Border blackline;
public Panel(JButton btnSend, JPanel MPanel, JLabel lblSpeed,
JTextField txtSpeed, String Name) {
super();
blackline = BorderFactory.createLineBorder(Color.gray);
MPanel = new JPanel(new GridBagLayout());
MPanel.setBorder(blackline);
MPanel.setBorder(BorderFactory.createTitledBorder(Name));
btnSend = new JButton("Btn 1");
lblSpeed = new JLabel("Speed");
txtSpeed = new JTextField(5);
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(5, 5, 5, 5);
c.gridx = 0;
c.gridy = 0;
c.weightx = 0.0;
c.weighty = 0.0;
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 4;
MPanel.add(btnSend, c);
c.gridwidth = 1;
c.gridx = 0;
c.gridy = 1;
MPanel.add(lblSpeed, c);
c.gridx = 1;
c.gridy = 1;
MPanel.add(txtSpeed, c);
add(MPanel);
}
}
そして最後に私のパネルクラス:
public class Panel2 extends Panel {
public Panel2(JButton btnSend, JPanel MPanel, JLabel lblSpeed,
JTextField txtSpeed, String Name) {
super(btnSend, MPanel, lblSpeed, txtSpeed, Name);
// TODO Auto-generated constructor stub
}
}
と
public class Panel3 extends Panel {
public Panel3(JButton btnSend, JPanel MPanel, JLabel lblSpeed,
JTextField txtSpeed, String Name) {
super(btnSend, MPanel, lblSpeed, txtSpeed, Name);
// TODO Auto-generated constructor stub
}
}