Почему южная панель не появляется для первой вкладки - только для второй?Swing - JTabbedPane - панель не отображается для обеих вкладок
Если я вместо этого называет южную панель() для каждой вкладки, да - появляется южная панель, НО - слушатели не работают (что, я думаю, связано с распределением gui-объектов, таких как кнопки два раза с новыми адресами памяти) ,
Так что - независимо от того, что я делаю, проблема - либо южная панель не появляется, либо она появляется, но обратные вызовы не работают на всех, для первой вкладки.
Любые решения этой
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MyApp extends JFrame implements ActionListener, ItemListener {
private JTabbedPane pane;
private JPanel tab1Panel, tab2Panel, centerPanel, southPanel, inputPanel, checkPanel;;
private JScrollPane scrollPane1, scrollPane2, scrollPane3;
private JTextArea area1, area2;
private JButton quit, ok;
private JCheckBox check;
private JTextField input;
private JLabel input_lbl, check_lbl;
public static void main(String[] args) {
new MyApp().setVisible(true);
}
public MyApp() {
initComp();
setListeners();
}
private void initComp() {
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
setSize(dim.width/2, dim.height/2);
setLocation(dim.width/2-this.getSize().width/2, dim.height/2-this.getSize().height/2);
southPanel();
tab1();
tab2();
pane = new JTabbedPane();
pane.addTab("info om xml", tab1Panel);
pane.addTab("rita", tab2Panel);
Container contentPane = getContentPane();
contentPane.add(pane);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private void tab1() {
area1 = new JTextArea();
area2 = new JTextArea();
scrollPane1 = new JScrollPane(area1, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane2 = new JScrollPane(area2, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
centerPanel = new JPanel(new GridLayout(1, 2));
centerPanel.add(scrollPane1);
centerPanel.add(scrollPane2);
tab1Panel = new JPanel(new BorderLayout());
tab1Panel.add(centerPanel, BorderLayout.CENTER);
tab1Panel.add(southPanel, BorderLayout.SOUTH);
}
private void tab2() {
centerPanel = new JPanel();
centerPanel.add(new JLabel("this is for drawing"));
tab2Panel = new JPanel(new BorderLayout());
tab2Panel.add(centerPanel, BorderLayout.CENTER);
tab2Panel.add(southPanel, BorderLayout.SOUTH);
}
private void southPanel() {
ok = new JButton("Ok");
quit = new JButton("Avsluta");
check_lbl = new JLabel("Change");
input_lbl = new JLabel("Document");
input = new JTextField("");
input.setEditable(false);
check = new JCheckBox();
inputPanel = new JPanel(new BorderLayout());
inputPanel.add(input_lbl, BorderLayout.WEST);
inputPanel.add(input, BorderLayout.CENTER);
checkPanel = new JPanel(new BorderLayout());
checkPanel.add(check_lbl, BorderLayout.WEST);
checkPanel.add(check, BorderLayout.CENTER);
southPanel = new JPanel(new GridLayout(1, 4));
southPanel.add(quit);
southPanel.add(ok);
southPanel.add(inputPanel);
southPanel.add(checkPanel);
}
@Override
public void actionPerformed(ActionEvent aE) {
String theEvent = aE.getActionCommand();
if (theEvent.equals("Avsluta")) {
System.exit(0);
} else if (theEvent.equals("Ok")) {
System.out.println("ok!");
}
}
@Override
public void itemStateChanged(ItemEvent iE) {
if (iE.getStateChange() == iE.SELECTED) {
input.setEditable(true);
} else {
input.setEditable(false);
}
}
private void setListeners() {
check.addItemListener(this);
ok.addActionListener(this);
quit.addActionListener(this);
}
}
Edit: Может быть, я должен поставить вопрос по-другому - Как я мог бы сделать эти две вкладки одни и те же southPanel?
ОК спасибо !!!!!! – java