好的,Java初学者编码器。 我正在尝试使用Java Swing创建一个多用途的数学实用程序。我希望它做的一件事是能够解决基本对数。我的逻辑完全没有了,但我在输出本身时遇到了麻烦。我有一个类(名为" LogTab"),其中是一个嵌套的静态类(名为" LogPanel"),用于实际输入区域。该按钮位于LogPanel类之外,当我按下它时,我希望它能够获取LogTab中的TextFields值(命名为" logBase"和" logNum"),计算它们,并将它们发送到输出类。除了我从TextFields 获取值的部分之外,我一切都很好并且正常工作。
这是我的代码。
public class LogTab extends JPanel {
@SuppressWarnings("serial")
static class LogInput extends JComponent {
public LogInput() {
JComponent logInputPanel = new JPanel();
setLayout(new GridBagLayout());
JTextField logLbl = new JTextField();
logLbl.setText("Log");
logLbl.setEditable(false);
JTextField logBase = new JTextField(1);
JTextField logNum = new JTextField(5);
GridBagConstraints lgc = new GridBagConstraints();
lgc.weightx = 0.5;
lgc.weighty = 0.5;
lgc.gridx = 0;
lgc.gridy = 0;
add(logLbl,lgc);
lgc.gridx = 1;
lgc.gridy = 1;
add(logBase,lgc);
lgc.gridx = 2;
lgc.gridy = 0;
add(logNum,lgc);
}
}
public LogTab() {
// Set Layout
setLayout(new GridBagLayout());
// Create components
JLabel promptLabel = new JLabel("Enter Logarithm: ");
JButton solveButton = new JButton("Solve");
final LogInput logInput = new LogInput();
solveButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
double base = Double.valueOf(logInput.logBase.getText());
double num = Double.valueOf(logInput.logNum.getText());
OutputPanel.outputField.setText(String.valueOf(solve(base,num)));
} finally {
}
}
});
// Code that adds the components, bla bla bla
}
public double solve(double base, double num) {
return (Math.log(base)/Math.log(num));
}
}
当我尝试编译它时(通过Eclipse,顺便说一句),我得到一个错误,说" logBase / logNum无法解析或者不是字段"。我如何更改它以便我的ActionListener可以从TextFields获取文本?
由于
P.S。这是我关于Stack Overflow的第一个问题,所以如果我搞砸了,请告诉我:)
答案 0 :(得分:2)
制作logBase
和logNum
个实例字段......
static class LogInput extends JComponent {
private JTextField logBase;
private JTextField logNum;
public LogInput() {
JComponent logInputPanel = new JPanel();
setLayout(new GridBagLayout());
JLabel logLbl = new JLabel("Log");
logBase = new JTextField(1);
logNum = new JTextField(5);
现在添加一些吸气剂......
public double getBase() {
String text = logBase.getText();
if (text.trim().isEmpty()) {
text = "0";
}
return Double.parseDouble(text);
}
public double getNumber() {
String text = logNum.getText();
if (text.trim().isEmpty()) {
text = "0";
}
return Double.parseDouble(text);
}
现在,您可以从logBase
logNum
和LogInput
的值
关于这一点,我认为JSpinner
或JTextField
会更好,因为他们有能力自己验证输入。有关详细信息,请参阅How to Use Spinners和How to Use Formatted Text Fields
答案 1 :(得分:0)
问题是logBase
和logNum
的范围仅限于构造函数,因此其他方法无法访问。
制作logBase
的{{1}}和logNum
个字段:
LogInput
在构造函数中,删除static class LogInput extends JComponent {
JTextField logBase, logNum;
标识符:
JTextField