나는 자바로 만들고 싶은 계산기에 문제가있다. JLabel에는 숫자가 입력 된 숫자를 표시해야합니다. 내 문제는 사용자가 버튼을 누를 때마다 프레임이 다시 그려지지 않고 업데이트 된 JLabel 텍스트가있는 새로운 JFrame이 열리는 것입니다. 나는 새로운 JFrame이 내 generateCalculatorFrame() 메소드의 새로운 것에 속한다고 생각하지만, JFrame을 다시 그리는 방법을 모른다. 나는 약 2 시간 동안 해결책을 찾고 나보다 더 숙련 된 프로그래머에게 물었다. 그러나 그는 해결책을 찾지 못했다. 여기 JLabel을 다시 칠하는 방법?
내 코드입니다 :package com.decase.taschenrechner;
공용 클래스 계산기 {
public static void main(String[] args) {
// Erzeugt das CalculatorFrame
CalculatorFrame.generateCalculatorFrame();
// Legt die Funktionen der Buttons fest
ButtonEvents.generateButtonEvents();
}
}
package com.decase.taschenrechner;
수입 javax.swing.JFrame;
공용 클래스 CalculatorFrame {
public static JFrame generateCalculatorFrame()
{
JFrame calculatorFrame = new JFrame("Taschenrechner");
// Legt die Größe des Fensters fest
calculatorFrame.setSize(450, 600);
// Schließt das Fenster beim Klick auf "X"
calculatorFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Fügt das calculatorPanel dem calculatorFrame hinzu
calculatorFrame.add(CalculatorPanel.generateCalculatorPanel());
// Setzt die Position des Fensters auf Null, also auf die Mitte des Bildschirms
calculatorFrame.setLocationRelativeTo(null);
// Setzt die Sichtbarkeit des Fensters auf sichtbar
calculatorFrame.setVisible(true);
return calculatorFrame;
}
}
package com.decase.taschenrechner;
수입 java.awt.Color에; 가져 오기 java.awt.GridLayout;
import javax.swing.BoxLayout; import javax.swing.JPanel;
공용 클래스 CalculatorPanel {
public static JPanel generateCalculatorPanel()
{
// Erzeugt ein JPanel auf dem die anderen beiden Panel dargestellt werden
JPanel calculatorPanel = new JPanel();
// Legt das Layout des JPanels fest
calculatorPanel.setLayout(new BoxLayout(calculatorPanel, BoxLayout.PAGE_AXIS));
// Legt die Farbe des JPanels fest
calculatorPanel.setBackground(Color.DARK_GRAY);
// Legt das Layout des JPanels fest
calculatorPanel.setLayout(new GridLayout(2, 1));
calculatorPanel.add(CalculatorDisplay.generateCalculatorDisplay());
calculatorPanel.add(generateButtonPanel());
return calculatorPanel;
}
public static JPanel generateButtonPanel()
{
// Erzeugt ein neues JPanel auf dem die Buttons dargestellt werden
JPanel buttonPanel = new JPanel();
// Legt die Farbe des JPanels fest
buttonPanel.setBackground(Color.DARK_GRAY);
// Legt das Layout des JPanels fest
buttonPanel.setLayout(new GridLayout(5, 4));
// Fügt die einzelnen Buttons dem JPanel hinzu
buttonPanel.add(CalculatorButtons.buttonOne);
buttonPanel.add(CalculatorButtons.buttonTwo);
buttonPanel.add(CalculatorButtons.buttonThree);
buttonPanel.add(CalculatorButtons.buttonDeleteLast);
buttonPanel.add(CalculatorButtons.buttonFour);
buttonPanel.add(CalculatorButtons.buttonFive);
buttonPanel.add(CalculatorButtons.buttonSix);
buttonPanel.add(CalculatorButtons.buttonPlus);
buttonPanel.add(CalculatorButtons.buttonSeven);
buttonPanel.add(CalculatorButtons.buttonEight);
buttonPanel.add(CalculatorButtons.buttonNine);
buttonPanel.add(CalculatorButtons.buttonMinus);
buttonPanel.add(CalculatorButtons.buttonDeleteAll);
buttonPanel.add(CalculatorButtons.buttonComma);
buttonPanel.add(CalculatorButtons.buttonNull);
buttonPanel.add(CalculatorButtons.buttonMultiply);
buttonPanel.add(CalculatorButtons.buttonBracketRight);
buttonPanel.add(CalculatorButtons.buttonBracketLeft);
buttonPanel.add(CalculatorButtons.buttonEqual);
buttonPanel.add(CalculatorButtons.buttonDivide);
return buttonPanel;
}
}
package com.decase.taschenrechner;
수입 java.awt.Color에;
import javax.swing.JLabel;
공용 클래스 CalculatorDisplay {
public static String displayText = "";
public static JLabel generateCalculatorDisplay()
{
// Erstellt ein neues JLabel
JLabel calculatorDisplay = new JLabel();
// Legt die Größe des JLabels fest
calculatorDisplay.setSize(50, 50);
// Legt die Hintergrundfarbe des JLabels fest
calculatorDisplay.setOpaque(true);
calculatorDisplay.setBackground(Color.BLACK);
// Legt die Schriftgröße des JLabels fest
calculatorDisplay.setFont(calculatorDisplay.getFont().deriveFont(30f));
// Legt die Schriftfarbe des JLabels fest
calculatorDisplay.setForeground(Color.WHITE);
// Legt den Text des JLabels fest
calculatorDisplay.setText(displayText);
// Gibt das JLabel zurück
return calculatorDisplay;
}
}
package com.decase.taschenrechner;
수입 java.awt.event.ActionEvent의; 가져 오기 java.awt.event.ActionListener;
공용 클래스 ButtonEvents {
public static void generateButtonEvents() {
// Legt die Funktionen von buttonNull fest
CalculatorButtons.buttonNull.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + "0";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonOne fest
CalculatorButtons.buttonOne.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + "1";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonTwo fest
CalculatorButtons.buttonTwo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + "2";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonThree fest
CalculatorButtons.buttonThree.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + "3";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonFour fest
CalculatorButtons.buttonFour.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + "4";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonFive fest
CalculatorButtons.buttonFive.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + "5";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonSix fest
CalculatorButtons.buttonSix.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + "6";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonSeven fest
CalculatorButtons.buttonSeven.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + "7";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonEight fest
CalculatorButtons.buttonEight.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + "8";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonNine fest
CalculatorButtons.buttonNine.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + "9";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonComma fest
CalculatorButtons.buttonComma.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + ".";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonPlus fest
CalculatorButtons.buttonPlus.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + "+";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonMinus fest
CalculatorButtons.buttonMinus.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + "-";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonMultiply fest
CalculatorButtons.buttonMultiply.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + "x";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonDivide fest
CalculatorButtons.buttonDivide.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + "\u00F7";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonBracketRight fest
CalculatorButtons.buttonBracketRight.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + "(";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonBracketLeft fest
CalculatorButtons.buttonBracketLeft.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + ")";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonEqual fest
CalculatorButtons.buttonEqual.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = CalculatorDisplay.displayText + "=";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
// Legt die Funktionen von buttonDeleteLast fest
CalculatorButtons.buttonDeleteLast.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
CalculatorDisplay.displayText = CalculatorDisplay.displayText.substring(0,
CalculatorDisplay.displayText.length() - 1);
CalculatorFrame.generateCalculatorFrame().repaint();
} catch (Exception e2) {
}
}
});
// Legt die Funktionen von buttonDeleteAll fest
CalculatorButtons.buttonDeleteAll.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CalculatorDisplay.displayText = "";
CalculatorFrame.generateCalculatorFrame().repaint();
}
});
}
은}
나는 당신의 코드를 보지 않았지만 (너무 많은 방법이있다.) 보통 당신은 단지 레이블에'setText()'를 호출하고 그 코드를 업데이트한다. 나는 전에 이와 같은 프로그램을 작성했고 그게 내가 한 전부입니다. * * Minif * Verifiable 예제 프로그램에 대한 FAQ를 참조하십시오. – markspace
문제를 올바르게 지적했습니다. 당신은 당신의 메소드를 호출 할 때마다 JFrame과 주 JPanel의 새로운 인스턴스를 생성합니다. 인스턴스를 한 번만 만들고 인스턴스에 대한 참조를 저장하지 않는 이유는 무엇입니까? 나는 당신이 싱글 톤 패턴을 사용하는 것을 실패로 시도하고 있다고 생각한다. – RubioRic
어이 마크 스페이스, 답장을 보내 주셔서 감사합니다. RubioRic도 고맙습니다.하지만 제 문제를 올바르게 설명하지 못했습니다. ^^ 이미 이전 시도에서 인스턴스를 만들었지 만,이 버전은 내 JLabel 텍스트를 업데이트하지 않았습니다. – Decase