- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的计算器有点问题。主要的“GUI”有数字键盘和一些操作符,但我为所有三角函数添加了一个 JMenuItem,因为它们在新窗口中打开。我在主 GUI 上使用运算符(+、-、sqrt、power 等)没有问题,但我似乎根本无法使用三角函数。我在代码的注释中添加了更多信息(阅读最后一个名为 t 的第三个实例变量后面的注释)。
public class Calculator extends JFrame
{
//TILVIKSBREYTUR
JFrame rammi; //Rammi inniheldur panel
JPanel pnl; //Panel inniheldur takka
private final Font BIGGER_FONT = new Font("monspaced", Font.PLAIN, 20); //Letur
public JTextField txt; //Textareitur
private JButton b0; //b0 - b9 eru númeratakkar
private JButton b1;
private JButton b2;
private JButton b3;
private JButton b4;
private JButton b5;
private JButton b6;
private JButton b7;
private JButton b8;
private JButton b9;
private JButton bDecPoint; //Decimal point
private JButton bc; //Clear takki, endurstillir textareit
private JButton bPlus; //Plús takki
private JButton bMinus; //Mínus takki
private JButton bPower; //Veldatakki
private JButton bSqrt; //Kvaðratrótartakki
private JButton bDivide; //Deilingar takki
private JButton bMult; //Margföldunar takki
private JButton bxRoot; //N-tu rótartakki
private JButton bEqual; //Jafnt og takki
private JButton bPer; //prósent
private JButton bAns; //síðasta útkoma
private JButton bPi; //Pi
private JButton bSvigi1; //Svigi
private JButton bSvigi2; //Svigi
private JSeparator sep1; //Separator, skilur að textareit og lyklaborð
private JSeparator sep2; //Separatorm skilur að númer og virkja
public boolean number; //tala
public boolean degPressed; //Er Degrees valið ?
public boolean trigOpen; //Er Trigonmetry flipinn opinn?
public boolean trigOpenOp; //hjálpar breyta fyrir virkni
public String equalOp; //Strengur fyrir virkja
public String ans;
public String ansOp; //Strengur
private JMenuBar menuBar; //Menu bar
private JMenu file; //Flipi í menu bar
private JMenuItem trigon; //Hornaföll
private JRadioButtonMenuItem deg; //undirgluggi flipa í menubar
private JRadioButtonMenuItem rad; //undirgluggi flipa í menubar
private Trigonmetry t; //if I do: private Trigonmetry t = new Trigonmetry then it works
//perfectly but if I do that then the Trigonmetry window opens up
//when I open the Calculator but I just want Trigonmetry window
//to open up when Trigonmetry MenuItem i pressed
private CalculatorOp op = new CalculatorOp(); //CalculatorOp classi sem sér um virkni virkjanna
public Calculator(){
initUI();
}
public final void initUI(){
//TILVIKSBREYTUM GEFID GILDI
rammi = new JFrame();
degPressed = false;
trigOpen = false;
trigOpenOp = false;
trigon = new JMenuItem("Trigonmetry");
pnl = new JPanel();
txt = new JTextField("0.0");
menuBar = new JMenuBar();
file = new JMenu("File");
file.setMnemonic(KeyEvent.VK_F);
deg = new JRadioButtonMenuItem("Degrees");
rad = new JRadioButtonMenuItem("Radians", true);
number = true;
equalOp = "=";
ansOp = "ANS";
sep1 = new JSeparator();
sep2 = new JSeparator(SwingConstants.VERTICAL);
b0 = new JButton("0");
b1 = new JButton("1");
b2 = new JButton("2");
b3 = new JButton("3");
b4 = new JButton("4");
b5 = new JButton("5");
b6 = new JButton("6");
b7 = new JButton("7");
b8 = new JButton("8");
b9 = new JButton("9");
bc = new JButton("C");
bPer = new JButton("%");
bAns = new JButton("ANS");
bDecPoint = new JButton(".");
bPlus = new JButton("+");
bMinus = new JButton("-");
bPower = new JButton("x^n");
bSqrt = new JButton("√x");
bxRoot = new JButton("n√x");
bDivide = new JButton("/");
bMult = new JButton("*");
bEqual = new JButton("=");
//bSvigi1 = new JButton("(");
//bSvigi2 = new JButton(")");
//HÖNNUN RAMMA
setTitle("GCalc");
setLocationRelativeTo(null);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setMinimumSize(new Dimension(370, 280));
//STADSETNING HLUTA
txt.setHorizontalAlignment(JTextField.RIGHT);
txt.setFont(BIGGER_FONT);
pnl.setLayout(null);
//tölur og clear
bc.setBounds(10, 10, 50, 30);
pnl.add(bc);
bDecPoint.setBounds(10, 190, 50, 30);
pnl.add(bDecPoint);
b0.setBounds(70, 190, 50, 30);
pnl.add(b0);
b1.setBounds(10, 150, 50, 30);
pnl.add(b1);
b2.setBounds(70, 150, 50, 30);
pnl.add(b2);
b3.setBounds(130, 150, 50, 30);
pnl.add(b3);
b4.setBounds(10, 110, 50, 30);
pnl.add(b4);
b5.setBounds(70, 110, 50, 30);
pnl.add(b5);
b6.setBounds(130, 110, 50, 30);
pnl.add(b6);
b7.setBounds(10, 70, 50, 30);
pnl.add(b7);
b8.setBounds(70, 70, 50, 30);
pnl.add(b8);
b9.setBounds(130, 70, 50, 30);
pnl.add(b9);
//virkjar
bAns.setBorder(null);
bAns.setBounds(130, 190, 50, 30);
pnl.add(bAns);
bPlus.setBorder(null);
bPlus.setBounds(200, 70, 30, 30);
pnl.add(bPlus);
bMinus.setBorder(null);
bMinus.setBounds(240, 70, 30, 30);
pnl.add(bMinus);
bSqrt.setBorder(null);
bSqrt.setBounds(240, 150, 30, 30);
pnl.add(bSqrt);
bPower.setBorder(null);
bPower.setBounds(200, 150, 30, 30);
pnl.add(bPower);
bDivide.setBorder(null);
bDivide.setBounds(200, 110, 30, 30);
pnl.add(bDivide);
bMult.setBorder(null);
bMult.setBounds(240, 110, 30, 30);
pnl.add(bMult);
bxRoot.setBorder(null);
bxRoot.setBounds(280, 70, 30, 30);
pnl.add(bxRoot);
bPer.setBorder(null);
bPer.setBounds(320, 70, 30, 30);
pnl.add(bPer);
//bSvigi1.setBorder(null);
//bSvigi1.setBounds(280, 110, 30, 30);
//pnl.add(bSvigi1);
//bSvigi2.setBorder(null);
//bSvigi2.setBounds(320, 110, 30, 30);
//pnl.add(bSvigi2);
bEqual.setBounds(200, 190, 70, 30);
pnl.add(bEqual);
//seperators & textfield
sep1.setBounds(20, 50, 330, 10);
pnl.add(sep1);
sep2.setBounds(190, 60, 10, 160);
pnl.add(sep2);
txt.setBounds(70, 10, 280, 30);
pnl.add(txt);
add(pnl);
//Setjum inní Menu
file.add(deg);
file.add(rad);
file.add(trigon);
menuBar.add(file);
getContentPane().add(menuBar, BorderLayout.NORTH);
//HLUTIR SYNILEGIR
setVisible(true);
//NUMBER LISTENER
ActionListener numberListener = new NumberListener();
b0.addActionListener(numberListener);
b1.addActionListener(numberListener);
b2.addActionListener(numberListener);
b3.addActionListener(numberListener);
b4.addActionListener(numberListener);
b5.addActionListener(numberListener);
b6.addActionListener(numberListener);
b7.addActionListener(numberListener);
b8.addActionListener(numberListener);
b9.addActionListener(numberListener);
bDecPoint.addActionListener(numberListener);
//bSvigi1.addActionListener(numberListener);
//bSvigi2.addActionListener(numberListener);
//OPERATOR LISTENER
ActionListener operatorListener = new OperatorListener();
bPlus.addActionListener(operatorListener);
bMinus.addActionListener(operatorListener);
bDivide.addActionListener(operatorListener);
bMult.addActionListener(operatorListener);
bSqrt.addActionListener(operatorListener);
bPower.addActionListener(operatorListener);
bEqual.addActionListener(operatorListener);
bxRoot.addActionListener(operatorListener);
bPer.addActionListener(operatorListener);
if(trigOpen){
t.bCos.addActionListener(operatorListener);
}
//ANS LISTENER
ActionListener ansListener = new AnsListener();
bAns.addActionListener(ansListener);
//CLEAR LISTENER
ActionListener clearListener = new ClearListener();
bc.addActionListener(clearListener);
//Menu LISTENER
ActionListener menuListener = new MenuListener();
trigon.addActionListener(menuListener);
//RadioButton LISTENER
ActionListener radioListener = new RadioListener();
deg.addActionListener(radioListener);
//RadioButton LISTENER 2
ActionListener radioListener2 = new RadioListener2();
rad.addActionListener(radioListener2);
}
/**E: Núllstillir
private void action() {
number = true;
txt.setText("0.0");
equalOp = "=";
op.setTotal("0.0");
} */
//VIRKNI RADIO TAKKANS SEM BREYTIR YFIR Í GRÁÐUR
class RadioListener implements ActionListener{
public void actionPerformed(ActionEvent e){
degPressed = true;
}
}
//VIRKNI RADIO TAKKANS SEM BREYTIR YFIR Í RADÍANA
class RadioListener2 implements ActionListener{
public void actionPerformed(ActionEvent e){
degPressed = false;
}
}
//VIRKNI CLEAR TAKKANS
class ClearListener implements ActionListener{
public void actionPerformed(ActionEvent e){
txt.setText("0.0");
}
}
//VIRKNI TRIGONMETRY FLIPA
class MenuListener implements ActionListener{
public void actionPerformed(ActionEvent e){
t = new Trigonmetry();
trigOpen = true;
}
}
//VIRKNI ANS TAKKA
class AnsListener implements ActionListener{
public void actionPerformed(ActionEvent e){
ansOp = e.getActionCommand();
if (ansOp.equals("ANS")) {
txt.setText(ans);
}
else
txt.setText("0.0");
}
}
//VIRKNI TALNA TAKKA
class NumberListener implements ActionListener{
public void actionPerformed(ActionEvent event){
String digit = event.getActionCommand();
if (number){
txt.setText(digit);
number = false;
}
else{
txt.setText(txt.getText() + digit);
}
}
}
// VIRKNI "VIRKJA"
class OperatorListener implements ActionListener{
public void actionPerformed(ActionEvent e){
if (number){
//action();
txt.setText("0.0");
}
else{
number = true;
String displayText = txt.getText();
if (equalOp.equals("=")) {
op.setTotal(displayText);
}
else if (equalOp.equals("+")) {
op.add(displayText);
}
else if (equalOp.equals("-")) {
op.subtract(displayText);
}
else if (equalOp.equals("*")) {
op.multiply(displayText);
}
else if (equalOp.equals("/")) {
op.divide(displayText);
}
else if(equalOp.equals("x^n")){
op.power(displayText);
}
else if(equalOp.equals("√x")){
op.squareRoot(displayText);
}
else if(equalOp.equals("n√x")){
op.xRoot(displayText);
}
else if(equalOp.equals("%")){
op.perCent(displayText);
}
// else if(t.operand.equals("cos")){
// if(degPressed){
// op.cOsDeg(displayText);
//}
//else
// op.cOs(displayText);
//}
//else if(equalOp.equals("sin")){
// op.sIn(displayText);
//}
//else if(equalOp.equals("tan")){
// op.tAn(displayText);
//}
txt.setText("" + op.getTotalString());
ans = txt.getText();
equalOp = e.getActionCommand();
//t.operand = e.getActionCommand();
}
}
}
//*************** MAIN ***************//
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable(){
public void run(){
Calculator calc = new Calculator();
}
});
}
}
这是我的 Tigonmetry 类,如您所见,我也尝试在那里设置一个 actionListener
public class Trigonmetry extends JFrame
{
JFrame frm; //rammi
public JButton bCos; //Cosinus
public JButton bSin; //Sinus
public JButton bTan; //Tangens
public JButton baCos; //arc Cosinus
public JButton baSin; //arc Sinus
public JButton baTan; //arc Tangens
private JPanel panel; //Panel
public String operand;
public Calculator cal;
private CalculatorOp opp = new CalculatorOp();
public Trigonmetry(){
InitialUI();
}
public final void InitialUI(){
frm = new JFrame();
operand = "";
bCos = new JButton("cos");
bSin = new JButton("sin");
bTan = new JButton("tan");
baCos = new JButton("acos");
baSin = new JButton("asin");
baTan = new JButton("atan");
panel = new JPanel();
//HÖNNUN RAMMA
setTitle("Trigonmetry");
setLocationRelativeTo(null);
setMinimumSize(new Dimension(180, 110));
panel.setLayout(null);
//TAKKAR
bSin.setBorder(null);
bSin.setBounds(20, 10, 40, 30);
panel.add(bSin);
bCos.setBorder(null);
bCos.setBounds(70, 10, 40, 30);
panel.add(bCos);
bTan.setBorder(null);
bTan.setBounds(120, 10, 40, 30);
panel.add(bTan);
baCos.setBorder(null);
baCos.setBounds(20, 50, 40, 30);
panel.add(baCos);
baSin.setBorder(null);
baSin.setBounds(70, 50, 40, 30);
panel.add(baSin);
baTan.setBorder(null);
baTan.setBounds(120, 50, 40, 30);
panel.add(baTan);
add(panel);
//HLUTIR SYNILEGIR
setVisible(true);
//OPERATORLISTENER
ActionListener operandListener = new OperandListener();
bCos.addActionListener(operandListener);
bSin.addActionListener(operandListener);
bTan.addActionListener(operandListener);
}
// VIRKNI "VIRKJA"
class OperandListener implements ActionListener{
public void actionPerformed(ActionEvent e){
if (cal.number){
//action();
cal.txt.setText("0.0");
}
else{
cal.number = true;
String displayText1 = cal.txt.getText();
if (cal.equalOp.equals("=")) {
opp.setTotal(displayText1);
}
else if(operand.equals("cos")){
if(cal.degPressed){
opp.cOsDeg(displayText1);
}
else
opp.cOs(displayText1);
}
else if(operand.equals("sin")){
if(cal.degPressed){
opp.sInDeg(displayText1);
}
else
opp.sIn(displayText1);
}
else if(operand.equals("tan")){
if(cal.degPressed){
opp.tAnDeg(displayText1);
}
else
opp.tAn(displayText1);
}
cal.txt.setText("" + opp.getTotalString());
operand = e.getActionCommand();
}
}
}
}
最佳答案
三角函数的计算器变量 cal 为空,因为它从未用当前计算器实例初始化。您需要将 Calculator 实例放入 Trigonometry 类中,以便 Trig 类可以调用 Calculator 的公共(public)方法。一种方法是通过构造函数参数,另一种方法是通过 setter 方法,例如 setCalculator(Calculator calculator) {...}
。构造函数参数技术的一个例子:
在 Calculator.java 中:
Trigonometry t = new Trigonometry(this);
在三角学课上:
// constructor now accepts a Calculator parameter
public Trigonmetry(Calculator calculator) {
// initialize the cal field with the current Calculator instance
cal = calculator;
InitialUI();
}
还有:
setBounds(...)
和 null 布局。还有:
setVisible(true)
,而是让 Calculator 在 Trigonometry 实例上调用它。在计算器中:
class MenuListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
t.setVisible(true);
trigOpen = true;
}
}
在三角学中:
public final void InitialUI() { // this should be named initialUi()
// ..... code deleted for brevity
panel.add(baTan);
add(panel);
// !! setVisible(true); // *** don't call this here ***
ActionListener operandListener = new OperandListener();
// ..... code deleted for brevity
}
关于java - 计算器:无法在主 GUI 的弹出窗口中使用 ActionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15852637/
我有一个无 GUI 的服务器(没有任何桌面环境或 Ubuntu 服务器的新鲜 Debian,没有 X 服务器,先验)。 我考虑安装 docker 并拉取一个基于官方 Ubuntu 的容器,并在其上添加
我正在构建一个带有临时用户名系统的简单聊天服务器。当屏幕弹出时,首先会出现一个简单的屏幕,询问您的用户名。你可以放入任何你想要的东西,这纯粹是暂时的(我也在尝试)。代码告诉程序继续,将用户名保存到代码
我想将来自其他类的图像显示到 QLabel 中,但要通知 GUI 有一个新的框架可用。我需要从非 GUI 类和非 GUI 线程发出信号。 有什么办法吗? 最佳答案 signal 可以从任何继承QObj
我正在用 Java 编写一个图形用户界面,它有一些按钮,其中一个按钮是选项。我想要它,所以当您单击选项时,它会将 gui 更改为我的选项 gui,而不是在另一个窗口中打开它。 我该怎么做? 最佳答案
标题说明了一切...我和我的 friend 正在这样做,我们不知道为什么 Ball.java 实际上没有在 gamePanel 中制作球,然后制作 GUI。顺便说一句,这是 8 球台球。这是代码: 驱
我正在使用 GUI 构建器,我想知道是否有一种简单的方法可以通过当前主窗口打开寄存器窗口(引用下面的页面)。我正在尝试通过菜单栏来执行此操作。 我一整天都在尝试,因为 GUI Builder 生成了一
我有一个程序使用了许多隐藏的 GUI 组件。例如,所有菜单项和打印机对话框/组件(仅占用至少 50 毫秒)。总的来说,我猜整个程序启动的大约 300 毫秒(或 40%)要归功于所有隐藏的东西。 我想做
我对 GUI 构建比较陌生。 我想制作一个带有按钮(我已经有了)的 GUI,用户可以按下该按钮并选择一个图像,然后动态地将该图像加载到面板中的 GUI 中。我希望每次用户浏览图像时图像都动态变化。 到
我有两年使用 Java 和 Visual Studio 进行企业应用程序编程的经验,而且我是 Python 和 wxPython 的新手。所以我的问题是:wxPython 能否为我提供足够丰富的 GU
这是我启动 mkvtoolnix-gui 时遇到的错误: mkvtoolnix-gui: symbol lookup error: mkvtoolnix-gui: undefined symbol:
我在初始屏幕上有一些最近使用的存储库,我想删除它们,因为我不再使用它们了。如何删除它们? 操作系统 = Windows 7 我查看了注册表并搜索了 git 目录,但找不到最近使用列表的存储位置。 最佳
我正在尝试在 matlab、GUI 中用户输入点作为输入和它们之间的连接。 我有 5 个 matlab 文件 - screen1.m、screen2.m、screen3.m、screen4.m、glo
我用java制作了一个客户端/服务器程序,我已经按照我想要的方式使用cmd完美地工作了,现在我正在尝试将代码的客户端转换为GUI,但是我在打印时遇到问题客户端消息并从文本字段和服务器消息读取客户端输入
我正在制作一种 CRUD 应用程序(Java GUI,MYSQL)我应该: 将数据从数据库加载到List(例如),然后将List加载到GUI 将数据从数据库加载到对象(具有 SQL 表等属性)和对象到
我正在开发一个有 5 个图形用户界面窗口的 Java 应用程序,其中一个是问候窗口或主窗口,我已经完成了所有逻辑部分的工作,我已经完成了 99.99%,唯一剩下的就是我如何以这种方式编码,当我点击一个
我目前正在开发 GUI。 我选择将我的 GUI 基于 bluej 项目 - Scribble。 当您创建 ScribbleGUI 对象时,DrawDemo 类会创建一个同时自动打开的 Canvas 。
在这里阅读了很多关于多进程、管道等的内容后,我还没有找到答案,但如果它已经存在,我深表歉意。 我有一个外围硬件,我正在尝试为其创建一个 GUI。我想让 GUI 使用来自外围设备的数据不断更新,同时仍保
我想做的是将 GUI 从一个单独文件中的类链接到另一个类。我的第一个类是一个主菜单,它将显示一些链接到另一个窗口的按钮。第二个类显示不同的窗口,但我现在遇到的问题是我不知道如何链接第一个类中的按钮来调
我的 GUI 代码中有一个奇怪的行为。如果用户在短时间内产生大量事件,则可能会发生正在运行的事件处理程序方法被另一个事件处理程序方法中断。由于一切都在同一个线程(GUI 线程)中运行,所以一切都应该按
这是一个涉及风格的问题。我正在寻找可以帮助我解决常见 GUI 设计问题 的想法。该应用程序是在 Winforms 中完成的,宁愿使用 WPF,该应用程序已经完成,但我是一个完美主义者,在与其他人合作时
我是一名优秀的程序员,十分优秀!