Hallo,
ich versuche mich gerade an einem Grafischem Taschenrechner, dabei orientiere ich mich an dem Windows tachenrechern was für funktionen ich haben möchte. Gerade möchte ich ein neues Panel erstellen um als overlay zu fungieren der über meinen beiden anderen Panels liegt. In diesem Panel soll man mehrere Buttons clicken können. Und dazu soll es nur angezeigt werden wenn ein bestimmter button geklicked wird. Gerade funktioniert das mit dem hzeigen und verstecken, nur das er kein overlay macht sondern es unter meinen panels anzeigt. Ich hab versucht als layout overlay zu benutzen was aber anscheinend nicht Funktioniert.
Das Wäre mein code: (Ich habe 3Klassen eine Main, eine für GUI und eine für Logic daswegen ist nicht alles da)
Ich nehme gerne jede hilfe entgegen auch gerne tips wie ich meinen code verbessern könnte. (ich mach gerade zum ersten mal ein GUI also nicht wundern wenn ales zusammengerust aussieht)
ich versuche mich gerade an einem Grafischem Taschenrechner, dabei orientiere ich mich an dem Windows tachenrechern was für funktionen ich haben möchte. Gerade möchte ich ein neues Panel erstellen um als overlay zu fungieren der über meinen beiden anderen Panels liegt. In diesem Panel soll man mehrere Buttons clicken können. Und dazu soll es nur angezeigt werden wenn ein bestimmter button geklicked wird. Gerade funktioniert das mit dem hzeigen und verstecken, nur das er kein overlay macht sondern es unter meinen panels anzeigt. Ich hab versucht als layout overlay zu benutzen was aber anscheinend nicht Funktioniert.
Das Wäre mein code: (Ich habe 3Klassen eine Main, eine für GUI und eine für Logic daswegen ist nicht alles da)
Java:
package Taschenrechner;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
public class GUI{
//defenierung
JPanel panel;
JFrame frame;
JTextField Result;
private Logic logic;
public JLabel EndResult;
public boolean Framesetter = false;
private JPanel moreoptionsPanel;
//methode für die erstellung des JFrames und der Panel
public GUI(){
//erstellung des JFrames
frame = new JFrame();
frame.setSize(350,500);
//erstellung des main pannels mit styling und
// angaben zur border, positionierung etc..
panel = new JPanel();
panel.setLayout(new GridLayout(2,1));
panel.setBackground(Color.lightGray);
panel.setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
//hinzufügung der 2 restlichen 2 Panels auf dem main panel
panel.add(Anzeige(), BorderLayout.NORTH);
//aufrung der logic klasse um die click events zu handeln
Logic logic = new Logic(Result, EndResult, this);
panel.add(Buttons(logic),BorderLayout.CENTER);
moreoptionsPanel = Moreoptions();
// das main panel wird auf das frame gesetzt
frame.add(panel, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Calculator");
frame.setVisible(true);
}
// methode die die erstellung des jbutton panels und die erstellung
// der buttons handelt
public JPanel Buttons(ActionListener listener){
//erstellung des panels warauf die buttons liegen
JPanel ButtonPanel = new JPanel();
ButtonPanel.setLayout(new GridLayout(5,4));
//string die die namen der buttons enthält
String[] buttons = {
"More", "%", "C", "+",
"7", "8", "9", "-",
"4", "5", "6", "*",
"1", "2", "3", "/",
"", "0", "", "="
};
// For loop der die buttons added unddirket auf das panel setzt
for (String text : buttons) {
JButton button = new JButton(text);
button.setPreferredSize(new Dimension(50, 50));
button.addActionListener(listener); // Attach the listener for handling button clicks
ButtonPanel.add(button); // Add button to the panel
}
//gibt das button panel zurück für die benutzung
return ButtonPanel;
}
public JPanel Moreoptions(){
JPanel moreoptions = new JPanel();
moreoptions.setLayout(new OverlayLayout(moreoptions));
moreoptions.setBackground(Color.LIGHT_GRAY);
moreoptions.setVisible(Framesetter);
JButton test = new JButton("click me");
moreoptions.add(test);
return moreoptions;
}
//methode die die erstellung des anzeige panels und die dazugehörigen
//variabeln erstellt und direkt aufs panel setzt.
public JPanel Anzeige(){
//erstellung des panels
JPanel Solution = new JPanel();
Solution.setLayout(new BorderLayout());
//erstellung des labels der das end ergbniss anzeigt
EndResult = new JLabel("0");
EndResult.setHorizontalAlignment(SwingConstants.RIGHT);
//erstellung des text fields das die geklicked buttons anzeigt
Result = new JTextField(26);
Result.setEditable(false);
Result.setPreferredSize(new Dimension(350,100));
Result.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
// hinzufügung des jlabels und des textfields auf das panel
Solution.add(Result);
Solution.add(EndResult,BorderLayout.NORTH);
return Solution;
}
public void toggleMoreOptionsPanel() {
Framesetter = !Framesetter;
if (Framesetter) {
// Add the more options panel when showing
panel.add(moreoptionsPanel, BorderLayout.EAST);
} else {
// Remove the more options panel when hiding
panel.remove(moreoptionsPanel);
}
frame.revalidate(); // Refresh the frame layout
frame.repaint();
}
}
Ich nehme gerne jede hilfe entgegen auch gerne tips wie ich meinen code verbessern könnte. (ich mach gerade zum ersten mal ein GUI also nicht wundern wenn ales zusammengerust aussieht)