Swing Von JPanel A auf JPanel B zugreifen.

Diskutiere Von JPanel A auf JPanel B zugreifen. im AWT, Swing, JavaFX & SWT Bereich.
Ich lerne Java.

Ich lerne Java.

Guten Tag

folgende Situation: ein JFrame beinhaltet zwei verschiedene JPanels A und B. A wird beim Programmstart angezeigt (setVisible(true)), B nicht (setVisible(false). JPanel A beinhaltet wiederum einen JButton, welcher beim Anklicken JPanel A auf "setVisible(false)" setzen soll und JPanel B auf "setVisible(true)".
Nun, bei JPanel A funktioniert das, da der JButton ja zu JPanel A gehört, bei JPanel B ABER NICHT (zB. panelB.setVisible(true)).
Entweder ich stehe auf dem Schlauch oder irgend jemand kennt eine tolle Methode, welche panelübergreiffend wirkt.

Grüsse
 
L

lam_tr

Wenn du die zwei Panels im JFrame instanziierst, dann hat JPanel A doch Zugriff auf JPanel B und umgekehrt oder? Und wenn die Buttons auch an der Stelle erstellt werden sowieso, oder habe ich dich falsch verstanden?
 
Ich lerne Java.

Ich lerne Java.

Leider nicht... liegt es daran, dass die zwei JPanels abgeleitet sind?

package test;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Testframe extends JFrame {

private JPanel contentPane;

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Testframe frame = new Testframe();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Testframe() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

PanelA panelA = new PanelA();
panelA.setBackground(Color.RED);
panelA.setBounds(12, 12, 200, 237);
panelA.setVisible(false);
getContentPane().add(panelA);

PanelB panelB = new PanelB();
panelB.setBackground(Color.GREEN);
panelB.setBounds(12, 12, 200, 237);
getContentPane().add(panelB);

}
}
 
L

lam_tr

Leider nicht... liegt es daran, dass die zwei JPanels abgeleitet sind?

package test;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Testframe extends JFrame {

private JPanel contentPane;

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Testframe frame = new Testframe();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Testframe() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

PanelA panelA = new PanelA();
panelA.setBackground(Color.RED);
panelA.setBounds(12, 12, 200, 237);
panelA.setVisible(false);
getContentPane().add(panelA);

PanelB panelB = new PanelB();
panelB.setBackground(Color.GREEN);
panelB.setBounds(12, 12, 200, 237);
getContentPane().add(panelB);

}
}
Also wenn es zwei separate Panels sind, dann würde ich EventBus benutzen, ist an sich sehr einfach und sehr lightweight https://github.com/greenrobot/EventBus.

Du registrierst Panel A und B in den EventBus und jedes mal wenn ein Button gefeuert wird, kannst du über den EventBus das gewünschte Panel öffnen.

Genaueres kannst du der verlinkten Seite nachschlagen.
 
Ich lerne Java.

Ich lerne Java.

Oh, danke vielmals für den Tipp! Werde mir das mal anschauen.
 
Thema: 

Von JPanel A auf JPanel B zugreifen.

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben