Hallo, das ist ein bestimmter Firmeningenieur.
Ich habe eine Webanwendung für das Aufgabenmanagement mit Swing zum Lernen erstellt. Ein Memorandum, weil der Bildschirmübergang zu dieser Zeit unerwartet problematisch war. Klicken Sie hier für verwandte frühere Artikel ↓ https://qiita.com/Ohtak/items/1be20a4b06b5833c3d61
-MainFrame als übergeordnetes Element, MainPanel als untergeordnetes Element, TaskRegisterPanel, TaskEditPanel -Panel-Erstellung, Bildschirmübergang, Reload-Management mit nur MainFrame
Von oben sind MainPanel, TaskRegisterPanel und TaskEditPanel.
Es ist endlich der Code. Zuerst vom übergeordneten mainFrame
MainFrame.java
public class MainFrame extends JFrame{
public String[] PanelNames = {"main","register","edit"};//Geben Sie das Panel mit diesem Namen an
//Erstellen Sie verschiedene Panels
MainPanel mainPanel = new MainPanel(this,PanelNames[0]);
TaskRegisterPanel taskRegisterPanel = new TaskRegisterPanel(this,PanelNames[1]);
TaskEditPanel taskEditPanel = new TaskEditPanel(this,PanelNames[2]);
public MainFrame(){
this.add(mainPanel);
mainPanel.setVisible(true);
this.add(taskRegisterPanel);
taskRegisterPanel.setVisible(false);
this.add(taskEditPanel);
taskEditPanel.setVisible(false);
this.setBounds(100, 100, 1200, 800);
}
public static void main(String[] args) {
MainFrame mainFrame = new MainFrame();
mainFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);
mainFrame.setVisible(true);
}
//Zum erneuten Zeichnen von Seiten
//Wenn das mainPanel dies nicht tut, werden die Änderungen nicht in der Anzeige angezeigt.
//Vorerst sind die beiden anderen Panels ...
public void reloadPage(String reloadPanelName){
if(reloadPanelName == PanelNames[0]){
this.remove(this.mainPanel);
MainPanel mainPanel = new MainPanel(this,PanelNames[0]);
this.add(mainPanel);
}
else if(reloadPanelName == PanelNames[1]){
this.remove(this.taskRegisterPanel);
TaskRegisterPanel taskRegisterPanel = new TaskRegisterPanel(this,PanelNames[1]);
this.add(taskRegisterPanel);
}
else if(reloadPanelName == PanelNames[2]){
this.remove(this.taskEditPanel);
TaskEditPanel taskEditPanel = new TaskEditPanel(this,PanelNames[2]);
this.add(taskEditPanel);
}
}
//Panel-Übergangsmethode
//Eine Methode zum Erstellen aller Panels im Voraus und zum Umschalten zwischen Anzeige und Nichtanzeige
//Hauptfenster anzeigen
public void showMainPanel(JPanel nowPanel){
nowPanel.setVisible(false);
mainPanel.setVisible(true);
}
//Anzeigen des Aufgabenregistrierungsfelds
public void showRegisterPanel(JPanel nowPanel){
nowPanel.setVisible(false);
taskRegisterPanel.setVisible(true);
}
//Aufgabenbearbeitungsfenster anzeigen
public void showEditPanel(JPanel nowPanel, TaskDto task){
nowPanel.setVisible(false);
//Legen Sie die anfängliche Zeichenfolge fest
taskEditPanel.setEditString(task);
taskEditPanel.setVisible(true);
}
}
Fast wie kommentiert. Festlegen, welches Bedienfeld angezeigt werden soll
public String[] PanelNames = {"main","register","edit"};
Ich mache es. Ich habe versucht, nicht so viele öffentliche Variablen wie möglich einzufügen, aber nur die Panel-Spezifikation von außerhalb der Klasse hat nicht funktioniert Das ist alles übrig ...
Als nächstes der Zugriffsteil zum Hauptrahmen anderer Bedienfelder
MainPanel.java
public class MainPanel extends JPanel{
MainFrame mainFrame;
//Panel-Erstellung
MainPanel(MainFrame mf,String name){
mainFrame = mf;
this.setName(name);
[Unterlassung]
//Tastenlayout
JPanel buttonPanel = new JPanel();
JButton createButton = new JButton("Erstelle neu");
createButton.setPreferredSize(new Dimension(100,50));
createButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
panelChangeToRegister(mainFrame.PanelNames[1]);
}
});
buttonPanel.add(createButton);
JButton editButton = new JButton("Aufgabe bearbeiten");
editButton.setPreferredSize(new Dimension(100,50));
editButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//Stellen Sie das ausgewählte Element auf dto, wenn die Taste gedrückt wird
TaskDto task = setTaskDtoFromSelectedString();
if(!isNotSelectedError){
panelChangeToEdit(mainFrame.PanelNames[2], task);
}
}
});
buttonPanel.add(editButton);
}
public void panelChangeToRegister(String toPanelName){
mainFrame.showRegisterPanel((JPanel)this);
}
public void panelChangeToEdit(String toPanelName, TaskDto task){
mainFrame.showEditPanel((JPanel)this, task);
}
}
Ich habe nur das Hauptpanel eingefügt, aber die anderen beiden sind auch so. Übrigens wird beim Übergang von den beiden anderen Bedienfeldern zum mainPanel mainFrame.reloadPage aufgerufen, um die Anzeige zurückzusetzen. Da ich beim Übergang zum Bearbeitungsbildschirm die ursprüngliche Zeichenfolge anzeigen wollte, hat nur panelChangeToEdit ein Argument.
Ich benutze auch Dto, aber dies ist ein anderer Artikel ...
Die Eltern-Kind-Struktur von Frame und Panel war problematischer als ich es mir vorgestellt hatte ... Wenn Sie das Timing von Neu und Hinzufügen nicht kennen, werden Sie verwirrt sein, welche Variable angezeigt wird. Das Folgende ist ein Beispiel für einen Fehler.
MainFrame_Fehlerbeispiel.java
public void reloadPage(String panelName, JPanel jp){
MainFrame mainFrame = new MainFrame();//Ich habe einen neuen Rahmen
mainFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);
mainFrame.setVisible(true);
if(reloadPanelName == PanelNames[0]){
mainFrame.remove(jp);//Ich versuche, aus einem neuen zu entfernen, anstatt dem, den ich zu Beginn erstellt habe.
MainPanel mainPanel = new MainPanel(this,PanelNames[0]);
mainFrame.add(mainPanel);//Und ich füge hinzu.
}
else if(reloadPanelName == PanelNames[1]){
mainFrame.remove(jp);
TaskRegisterPanel taskRegisterPanel = new TaskRegisterPanel(this,PanelNames[1]);
mainFrame.add(taskRegisterPanel);
}
else if(reloadPanelName == PanelNames[2]){
mainFrame.remove(jp);
TaskEditPanel taskEditPanel = new TaskEditPanel(this,PanelNames[2]);
mainFrame.add(taskEditPanel);
}
}
Was ich tun wollte war
Ich möchte vorsichtig sein, da das Timing von new nicht nur auf Swing, sondern auch auf andere Java-Anwendungen angewendet werden kann.
Recommended Posts