Я пытаюсь запустить несколько JFrames с настраиваемой панелью, которую я создал, с именем subpanel
. [Если вам интересно об именовании, у меня есть еще один класс под названием masterpanel
, который содержит кнопку, которая запускает новый кадр, содержащий новый экземпляр subpanel
.Swing Panels Изменение цвета
Целью subpanel
является то, что когда пользователь нажимает кнопку enter
, цвет меняется. В настоящее время у меня есть каждый subpanel
, содержащий внутренний класс под названием EnterAction
, который вызывает setBackground
, чтобы изменить цвет.
Мне было интересно, как я могу изменить это, чтобы я мог синхронизировать изменение цвета между всеми моими subpanels
.
В настоящее время у меня есть переменная green
, которая, я считаю, я могу пройти между всеми моими панелями. Однако, я не уверен, как я могу получить EnterAction
, чтобы изменить все активные панели?
Я думал о создании списка активных subpanels
? Но это вызовет дополнительную проблему, которая мне понадобится для поддержания списка, если пользователь закрывает subpanel
?
Вот мой код:
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.KeyStroke;
public class SubPanel extends javax.swing.JPanel
{
private Action enterAction;
public SubPanel()
{
initComponents();
enterAction = new EnterAction();
//KeyBindings on the enter button
this.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "doEnterAction");
this.getActionMap().put("doEnterAction", enterAction);
}
/**
* 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.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
setForeground(new java.awt.Color(1, 1, 1));
setToolTipText("");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);
}// </editor-fold>
// Variables declaration - do not modify
// End of variables declaration
private static int green = 240;
private class EnterAction extends AbstractAction
{
@Override
public void actionPerformed(ActionEvent ae)
{
//System.out.println("Enter button is pressed");
green -= 5;
if (green <= 0) green = 0;
setBackground(new java.awt.Color(255, green, 255));
}
}
}
EDIT: Там будет максимум 5 панелей. Это устраняет необходимость создания списка, поддерживающего активные панели.
* "Я пытаюсь запустить несколько JFrames" * См [Использование нескольких JFrames, хороший/плохой практике?] (Http://stackoverflow.com/a/9554657/418556) –
+1 для ['Action'] (http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html). – trashgod
@AndrewThompson Я создаю модель для чего-то. Думаю, я могу изменить сферу моего приложения. Будет открыто не более 5 окон. – Rhs