java jtextfield设置不可见_java – JPanel设置为不可见,除默认值之外的组合框选择将其设置为可见,但组件丢失...

我正在建立一个欧姆法律应用程序.请记住这是我的第一个程序(没有教程)所以请善待=)以下是它运行时的样子:

组合框有计算伏特,计算欧姆等的选项……

中心面板设置为隐形,直到您从组合框中做出选择.这是您做出选择时的样子:

我面临的问题是,第一次进行选择时,只显示一个JLabel / JTextArea组合(每对组合在一个垂直框内的自己的面板上):

如果我单击组合框并再次进行相同的选择,它将正确显示.我无法弄清楚为什么它在第一次点击时行为不正确.也许我在构建GUI时采取了错误的方法.这是迄今为止的代码:

private JFrame frame;

private String[] choiceList = {"", "Calculate Volts", "Calculate Amps", "Calculate Ohms", "Calculate Watts"};

private JTextField textField_2;

private JPanel centerPanel;

private String volts = "Volts";

private String amps = "Amps";

private String ohms = "Ohms";

private String watts = "Watts";

private JLabel var1Label;

private JLabel var2Label;

private JLabel var3Label;

private JFormattedTextField var1TextField;

private JFormattedTextField var2TextField;

private JFormattedTextField var3TextField;

/**

* Launch the application.

*/

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

public void run() {

try {

GUI window = new GUI();

window.frame.setVisible(true);

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

/**

* Create the application.

*/

public GUI() {

initialize();

}

/**

* Initialize the contents of the frame.

*/

private void initialize() {

frame = new JFrame();

frame.setTitle("BotsOne ElectriCalc");

frame.setBounds(100, 100, 450, 300);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel northPanel = new JPanel();

northPanel.setIgnoreRepaint(true);

northPanel.setBorder(new LineBorder(Color.GRAY));

frame.getContentPane().add(northPanel, BorderLayout.NORTH);

JLabel choiceLabel = new JLabel("Please make a selection:");

northPanel.add(choiceLabel);

JComboBox choiceCombo = new JComboBox(choiceList);

northPanel.add(choiceCombo);

choiceCombo.addActionListener(new ChoiceComboListener());

JPanel southPanel = new JPanel();

southPanel.setIgnoreRepaint(true);

southPanel.setBorder(new LineBorder(Color.GRAY));

frame.getContentPane().add(southPanel, BorderLayout.SOUTH);

JLabel label = new JLabel("Answer:");

southPanel.add(label);

textField_2 = new JTextField();

textField_2.setColumns(10);

southPanel.add(textField_2);

centerPanel = new JPanel();

centerPanel.setVisible(false);

centerPanel.setBorder(new LineBorder(Color.GRAY));

frame.getContentPane().add(centerPanel, BorderLayout.CENTER);

Box centerPanelVertBox = Box.createVerticalBox();

centerPanelVertBox.setAlignmentX(Component.CENTER_ALIGNMENT);

centerPanel.add(centerPanelVertBox);

centerPanelVertBox.setVisible(true);

centerPanelVertBox.setBorder(null);

JLabel pleaseEnterLabel = new JLabel("Please enter 2 of 3 values:");

pleaseEnterLabel.setBorder(new EmptyBorder(15, 0, 10, 0));

pleaseEnterLabel.setAlignmentX(Component.CENTER_ALIGNMENT);

centerPanelVertBox.add(pleaseEnterLabel);

JPanel var1Panel = new JPanel();

centerPanelVertBox.add(var1Panel);

var1Label = new JLabel("xxx");

var1Label.setAlignmentX(Component.CENTER_ALIGNMENT);

var1Panel.add(var1Label);

var1TextField = new JFormattedTextField(NumberFormat.getInstance());

var1TextField.setColumns(10);

var1Panel.add(var1TextField);

Panel var2Panel = new Panel();

centerPanelVertBox.add(var2Panel);

var2Label = new JLabel("xxx");

var2Label.setAlignmentX(Component.CENTER_ALIGNMENT);

var2Panel.add(var2Label);

var2TextField = new JFormattedTextField(NumberFormat.getInstance());

var2TextField.setColumns(10);

var2Panel.add(var2TextField);

Panel var3Panel = new Panel();

centerPanelVertBox.add(var3Panel);

var3Label = new JLabel("xxx");

var3Label.setAlignmentX(Component.CENTER_ALIGNMENT);

var3Panel.add(var3Label);

var3TextField = new JFormattedTextField(NumberFormat.getInstance());

var3TextField.setColumns(10);

var3Panel.add(var3TextField);

Panel calculatePanel = new Panel();

centerPanelVertBox.add(calculatePanel);

JButton calculateButton = new JButton("Calculate");

calculatePanel.add(calculateButton);

}

public class ChoiceComboListener implements ActionListener { //combobox actionlistener

public void actionPerformed(ActionEvent ev) {

JComboBox cb = (JComboBox)ev.getSource();

String currentComboSelection = (String)cb.getSelectedItem();

if (currentComboSelection.equals(choiceList[1])) { //choice 1 (Calculate Volts)

centerPanel.setVisible(true);

var1Label.setText(amps);

var2Label.setText(ohms);

var3Label.setText(watts);

//centerPanel.repaint();

}

if (currentComboSelection.equals(choiceList[2])) { //choice 2 (Calculate Amps)

centerPanel.setVisible(true);

var1Label.setText(volts);

var2Label.setText(ohms);

var3Label.setText(watts);

centerPanel.repaint();

}

if (currentComboSelection.equals(choiceList[3])) {

centerPanel.setVisible(true);

var1Label.setText(volts);

var2Label.setText(amps);

var3Label.setText(watts);

}

if (currentComboSelection.equals(choiceList[4])) {

centerPanel.setVisible(true);

var1Label.setText(volts);

var2Label.setText(amps);

var3Label.setText(ohms);

}

if (currentComboSelection.equals(choiceList[0])) {

centerPanel.setVisible(false);

//centerPanel.repaint();

}

}

}

如果你看一下底部,有一个名为ChoiceComboListener的内部类,这是comboBox监听器,我试过玩弄repaint()和其他各种各样的东西,但我无法想出任何东西.任何帮助,指导或批评都表示赞赏.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值