Действие кнопки, чтобы изменить цвет всей панели вкладок java swing - PullRequest
0 голосов
/ 16 января 2012

У меня есть 2 вкладки (A и B) в области вкладок. В A я пишу только setBackground (Color.RED);

В Б я положил кнопку. и коды это нравится:

A a=new A();

jButton1.addActionListener(new ActionListener() {
  @Override
  public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    a.setBackground(Color.BLUE);
    }
});

Я хочу изменить цвет кнопки A от действия кнопки B. Но я провал. Как я могу решить эту проблему ??

Заранее спасибо ...


до сих пор моя проблема не решена. Я публикую весь код :: Я использовал 2 пакета: «ОК», «ОК1». «ok» содержит 1 файл с именем save.java и код:

public class Save extends javax.swing.JFrame {
private JPanel panel1;
private JPanel panel2;A a=new A();B b=new B();



public Save() {
    initComponents();
}

//GEN-BEGIN:initComponents
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
    panel1=a.initComponents();
    panel2=b.initComponents();
    jTabbedPane1 = new javax.swing.JTabbedPane();
    jScrollPane1 = new javax.swing.JScrollPane();
    jScrollPane2 = new javax.swing.JScrollPane();
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    jTabbedPane1.addTab("Tab 1", null, panel1, "Just Panel");
    jTabbedPane1.setMnemonicAt(0, KeyEvent.VK_1);

    jTabbedPane1.addTab("Tab 2", null, panel2, "Button");
            jTabbedPane1.setMnemonicAt(1, KeyEvent.VK_2);

"ok1" содержит 2 файла: A.java и B.java ..... A.java ::::::::

             public class A extends javax.swing.JPanel {

/** Creates new form A */
public A() {
    initComponents();

}

/** This method is called from within the constructor to
 * initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is
 * always regenerated by the Form Editor.
 */
//GEN-BEGIN:initComponents
// <editor-fold defaultstate="collapsed" desc="Generated Code">
public JPanel initComponents() {

    jPanel11 = new javax.swing.JPanel();

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(
            jPanel11);
            jPanel11.setLayout(jPanel1Layout);

Б.джава ::::::::

             public class B extends javax.swing.JPanel {
A a = new A();

/** Creates new form B */
public  B() {
    initComponents();


}

/** This method is called from within the constructor to
 * initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is
 * always regenerated by the Form Editor.
 */
//GEN-BEGIN:initComponents
// <editor-fold defaultstate="collapsed" desc="Generated Code">
public JPanel initComponents() {

    jPanel1 = new javax.swing.JPanel();
    jButton1 = new javax.swing.JButton();

    jButton1.setText("Action");
    jButton1.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            a.jPanel11.setBackground(Color.RED);
        }
    });

Ответы [ 3 ]

1 голос
/ 16 января 2012

Ссылаясь на TabColors, который начинается с соответствия цвета вкладки и содержимого, следующий модифицированный конструктор TabContent добавляет кнопку, которая заставляет все панели использовать один и тот же цвет.

private TabContent(final int i, Color color) {
    setOpaque(true);
    setBackground(color);
    add(new JLabel("Tab content " + String.valueOf(i)));
    add(new JButton(new AbstractAction("Use my color") {

        @Override
        public void actionPerformed(ActionEvent e) {
            for (int j = 0; j < pane.getTabCount(); j++) {
                pane.getComponentAt(j).setBackground(
                    pane.getBackgroundAt(i));
            }
        }
    }));
}
1 голос
/ 16 января 2012

Глядя на ваш код, кажется, что вы делаете это неправильно.Прежде всего, не пишите эти строки

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

Надеюсь, это поможет вам объяснить, что вы делаетенеправильно.

Вот изображение программы при ее запуске:

AT START

Здесь изображение второй вкладки с кнопкой:

TAB WITH BUTTON ON IT

Вот изображение первой вкладки, когда вы нажимаете на кнопку tab2, чтобы изменить цвет фона tab1 на синий:

BACKGROUND COLOR OF TAB1 CHANGED

Надеюсь, этоможет помочь вам в ваших усилиях.

С уважением

0 голосов
/ 16 января 2012

Не следует создавать новый экземпляр A, но следует использовать экземпляр A, который был включен в панель с вкладками. Это можно сделать, выполнив поиск на панели вкладок для этого экземпляра A, или передать экземпляр A в B при создании B

...