Глядя на ваш код, кажется, что вы делаете это неправильно.Прежде всего, не пишите эти строки
private JPanel panel1;
private JPanel panel2;
, а пишите:
private A a = new A();
private B b = new B(a);
Поскольку a и b теперь сами являются панелями, поскольку они расширяют класс JPanel.
Итак, добавьте это в свой tabbedPane сейчас:
jTabbedPane1.addTab("Tab 1", null, a/*This is your Panel1*/, "Just Panel");
jTabbedPane1.addTab("Tab 2", null, b/*This is your Panel2*/, "Button");
Просто добавьте переменную JPanel в ваш класс B и измените конструктор вашего класса B следующим образом:
JPanel panel1;
public B(JPanel panel)
{
pane1 = panel;
initComponents(); // make this method return void in it's definition, in both the classes.
}
Теперь внутриметод actionPerformed () делает это:
jButton1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
panel1.setBackground(Color.RED);
}
});
Вот небольшая программа, измененная из предыдущего представления, которая напоминает ваш случай:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TabbedPaneExample extends JPanel
{
private Panel1 panel1;
private Panel2 panel2;
public TabbedPaneExample()
{
super(new GridLayout(1, 1));
JTabbedPane tabbedPane = new JTabbedPane();
//panel1 = getPanel("Panel Number 1");
panel1 = new Panel1("Panel Number 1");
tabbedPane.addTab("Tab 1", null, panel1, "Just Panel");
tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);
//panel2 = getPanelWithButton("COLOR");
panel2 = new Panel2("COLOR", panel1);
tabbedPane.addTab("Tab 2", null, panel2, "Button");
tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);
add(tabbedPane);
tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
}
private static void createAndDisplayGUI()
{
JFrame frame = new JFrame("Tabbed Pane Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TabbedPaneExample(), BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createAndDisplayGUI();
}
});
}
}
class Panel1 extends JPanel
{
public JLabel label;
public Panel1(String text)
{
label = new JLabel(text);
label.setHorizontalAlignment(JLabel.CENTER);
setLayout(new GridLayout(1, 1));
setBackground(Color.RED);
add(label);
}
}
class Panel2 extends JPanel
{
public JButton button;
public JPanel panel1;
public Panel2(String text, JPanel panel)
{
panel1 = panel;
button = new JButton(text);
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
panel1.setBackground(Color.BLUE);
}
});
setLayout(new GridLayout(1, 1));
add(button);
}
}
Надеюсь, это поможет вам объяснить, что вы делаетенеправильно.
Вот изображение программы при ее запуске:
Здесь изображение второй вкладки с кнопкой:
Вот изображение первой вкладки, когда вы нажимаете на кнопку tab2, чтобы изменить цвет фона tab1 на синий:
Надеюсь, этоможет помочь вам в ваших усилиях.
С уважением