JComboBoxの状態に応じて,JPanelの中身を切り替える
やりたいことはタイトル通り
コードの解説的なものは,いつか書く
あと,割とクソコード
あと,コード間違ってる気がする(なら公開するな)
コードそのもの
public class PanelPractice extends JFrame{ public static void main(String[] args) { PanelPractice frame = new PanelPractice(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 300, 100); frame.setTitle("タイトル"); frame.setVisible(true); } private JTextField txt = new JTextField(3); private JComboBox comb2 = new JComboBox<String>(); PanelPractice(){ JButton button1 = new JButton("Button1"); JButton button2 = new JButton("Button2"); JButton button3 = new JButton("Button3"); JPanel p = new JPanel(); p.setLayout(new GridLayout()); JPanel vpanel = new JPanel(); vpanel.add(txt); //JCombo String[] data = {"Ky","Sol"}; JComboBox cmb = new JComboBox<String>(data); cmb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String selectedItem = (String)cmb.getSelectedItem(); Runnable changeComp = new Runnable() { @Override public void run() { if(Objects.isNull(selectedItem)) { return; }else if(selectedItem.equals("Ky")) { vpanel.remove(comb2); vpanel.add(txt); vpanel.validate(); pack(); }else { vpanel.removeAll(); vpanel.add(comb2); vpanel.validate(); pack(); } } }; SwingUtilities.invokeLater(changeComp); } }); cmb.setSelectedItem(null); p.add(cmb); p.add(vpanel); p.add(button3); getContentPane().add(p, BorderLayout.CENTER); } }
(投稿した1分後に,修正部分見つかったよ・・・)