如何使用Java Swing/awt在面板中的单选按钮下放置标签

如何使用Java Swing/awt在面板中的单选按钮下放置标签,java,swing,layout-manager,jradiobutton,temperature,Java,Swing,Layout Manager,Jradiobutton,Temperature,如图所示,我创建了3个面板。第一个面板是“从”面板,第二个是“到”面板,第三个是按钮面板。所以问题是,我如何为“输入温度:[]”添加新行,以便它位于单选按钮下方?我对Java swing/awt非常陌生,请耐心听我说 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import java.awt.*; public class TemperatureCo

如图所示,我创建了3个面板。第一个面板是“从”面板,第二个是“到”面板,第三个是按钮面板。所以问题是,我如何为“输入温度:[]”添加新行,以便它位于单选按钮下方?我对Java swing/awt非常陌生,请耐心听我说

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.awt.*;

public class TemperatureConversion extends JFrame{

// component
JTextField txtFromTemp, txtToTemp;
JLabel lblFromTemp, lblToTemp;
JRadioButton radFromCelsius, radFromFahrenheit, radFromKelvin;
JRadioButton radToCelsius, radToFahrenheit, radToKelvin;    
JPanel pnlFromRadioButton, pnlToRadioButton, pnlFromTemp, pnlButton;
ButtonGroup bgFrom, bgTo;
JButton btnConvert, btnExit;

// constructor
public TemperatureConversion(){
    super("Temperature");

    // assign objects
    radFromCelsius = new JRadioButton("Celsius", true);
    radFromFahrenheit = new JRadioButton("Fahrenheit");
    radFromKelvin = new JRadioButton("Kelvin");
    lblFromTemp = new JLabel("Enter Temperature: ");
    pnlFromTemp = new JPanel();
    btnConvert = new JButton("Convert");
    btnExit = new JButton("Exit");
    pnlButton = new JPanel();
    txtFromTemp = new JTextField(3);
    lblToTemp = new JLabel("Comparable Temperature: ");
    txtToTemp = new JTextField(3);


    // register the button to a listener 
    btnExit.addActionListener(new MyButtonListener());
    btnConvert.addActionListener(new MyButtonListener());


    // make the multiple choice exclusive but not a container
    bgFrom = new ButtonGroup();
    bgFrom.add(radFromCelsius);
    bgFrom.add(radFromFahrenheit);
    bgFrom.add(radFromKelvin);

    // radio buttons
    radToCelsius = new JRadioButton("Celsius");
    radToFahrenheit = new JRadioButton("Fahrenheit", true);
    radToKelvin = new JRadioButton("Kelvin");

    // make the multiple choice exclusive 
    bgTo = new ButtonGroup();
    bgTo.add(radToCelsius);
    bgTo.add(radToFahrenheit);
    bgTo.add(radToKelvin);


    pnlFromRadioButton = new JPanel();
    pnlToRadioButton = new JPanel();

    // decorate the panel
    pnlFromRadioButton.setBorder(BorderFactory.createTitledBorder("From"));
    pnlToRadioButton.setBorder(BorderFactory.createTitledBorder("To"));

    // add radiobutton to panel
    pnlFromRadioButton.add(radFromCelsius);
    pnlFromRadioButton.add(radFromFahrenheit);
    pnlFromRadioButton.add(radFromKelvin);
    pnlToRadioButton.add(radToCelsius);
    pnlToRadioButton.add(radToFahrenheit);
    pnlToRadioButton.add(radToKelvin);

    // add button to panel
    pnlButton.add(btnConvert);
    pnlButton.add(btnExit);

    // add label and txt field to panel
    pnlFromRadioButton.add(lblFromTemp);
    pnlFromRadioButton.add(txtFromTemp);
    pnlToRadioButton.add(lblToTemp);
    txtToTemp.setEditable(false);
    pnlToRadioButton.add(txtToTemp);


    // add panels to the frame
    add(pnlFromRadioButton, BorderLayout.NORTH);
    add(pnlToRadioButton, BorderLayout.CENTER);
    add(pnlButton, BorderLayout.SOUTH);


    setVisible(true);
    setSize(400, 300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
}


// private inner class to handle button event
private class MyButtonListener implements ActionListener {
    // must override actionPerformed method
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == btnConvert) {
            if (radFromCelsius.isSelected())
             System.out.print("exit");
        } else if (e.getSource() == btnExit) {
            System.exit(0);
        }
    }
}


public static void main(String[] args) {
    new TemperatureConversion();
}

}

嵌套更多JPanel并使用布局管理器

例如,在需要两行的JPanel中,沿
BoxLayout.PAGE_轴
为其指定一个BoxLayout,然后使用顶部带有单选按钮的JPanel和底部带有JLabel和JTextField的JPanel(或任何您想要的内容)向该BoxLayout添加两个以上的JPanel

旁注:这是一个使用名为TempScale的枚举的好地方,它有三个值:摄氏度、华氏度、开尔文。您甚至可以为枚举提供与开尔文的转换公式

例如:

import java.awt.Component;
import java.awt.event.*;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;

@SuppressWarnings("serial")
public class TempConversion2 extends JPanel {
    private ToFromPanel fromPanel = new ToFromPanel("From", true);
    private ToFromPanel toPanel = new ToFromPanel("To", false);
    private ButtonPanel buttonPanel = new ButtonPanel(fromPanel, toPanel);

    public TempConversion2() {
        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
        add(fromPanel);
        add(toPanel);
        add(buttonPanel);
    }

    private static void createAndShowGui() {
        TempConversion2 mainPanel = new TempConversion2();

        JFrame frame = new JFrame("Temp Convert");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}

@SuppressWarnings("serial")
class ButtonPanel extends JPanel {

    public ButtonPanel(ToFromPanel fromPanel, ToFromPanel toPanel) {
        add(new JButton(new ConvertAction("Convert", fromPanel, toPanel)));
        add(new JButton(new ExitAction("Exit", KeyEvent.VK_X)));
    }

}

@SuppressWarnings("serial")
class ConvertAction extends AbstractAction {
    private ToFromPanel fromPanel;
    private ToFromPanel toPanel;

    public ConvertAction(String name, ToFromPanel fromPanel, ToFromPanel toPanel) {
        super(name);
        int mnemonic = (int) name.charAt(0);
        putValue(MNEMONIC_KEY, mnemonic);
        this.fromPanel = fromPanel;
        this.toPanel = toPanel;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String text = fromPanel.getText();
        try {
            double fromTemp = Double.parseDouble(text.trim());
            TempScale fromScale = fromPanel.getTempScalesPanel().getSelectedTempScale();
            double kelvinValue = fromScale.convertToKelvin(fromTemp);

            TempScale toScale = toPanel.getTempScalesPanel().getSelectedTempScale();
            double toValue = toScale.convertFromKelvin(kelvinValue);

            String toValueString = String.format("%.2f", toValue);
            toPanel.setText(toValueString);
        } catch (NumberFormatException e1) {
            Component parentComponent = fromPanel;
            String message = "Text must be a valid number: " + text;
            String title = "Invalid Text Entered";
            int messageType = JOptionPane.ERROR_MESSAGE;
            JOptionPane.showMessageDialog(parentComponent, message, title, messageType);
            fromPanel.setText("");
        }
    }
}

@SuppressWarnings("serial")
class ExitAction extends AbstractAction {
    public ExitAction(String name, int mnemonic) {
        super(name);
        putValue(MNEMONIC_KEY, mnemonic);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        System.exit(0);
    }
}

@SuppressWarnings("serial")
class ToFromPanel extends JPanel {
    private String title;
    private TempScalesPanel tempScalesPanel = new TempScalesPanel();
    private JTextField tempTextField = new JTextField(3);

    public ToFromPanel(String title, boolean textFieldEnabled) {
        this.title = title;
        tempTextField.setFocusable(textFieldEnabled);

        JPanel bottomPanel = new JPanel();
        bottomPanel.setLayout(new BoxLayout(bottomPanel, BoxLayout.LINE_AXIS));
        bottomPanel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
        bottomPanel.add(new JLabel("Temperature:"));
        bottomPanel.add(Box.createHorizontalStrut(8));
        bottomPanel.add(tempTextField);

        setBorder(BorderFactory.createTitledBorder(title));
        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
        add(tempScalesPanel);
        add(bottomPanel);
    }

    public String getTitle() {
        return title;
    }

    public TempScalesPanel getTempScalesPanel() {
        return tempScalesPanel;
    }

    public String getText() {
        return tempTextField.getText();
    }

    public void setText(String text) {
        tempTextField.setText(text);
    }
}

@SuppressWarnings("serial")
class TempScalesPanel extends JPanel {
    private ButtonGroup buttonGroup = new ButtonGroup();
    private Map<ButtonModel, TempScale> buttonTempMap = new HashMap<>();

    public TempScalesPanel() {
        for (TempScale tempScale : TempScale.values()) {
            JRadioButton radioButton = new JRadioButton(tempScale.getName());
            add(radioButton);
            buttonGroup.add(radioButton);
            buttonTempMap.put(radioButton.getModel(), tempScale);
            // set first button as selected by default
            if (buttonGroup.getSelection() == null) {
                buttonGroup.setSelected(radioButton.getModel(), true);
            }
        }
    }

    public TempScale getSelectedTempScale() {
        ButtonModel model = buttonGroup.getSelection();
        return buttonTempMap.get(model);
    }
}

嵌套更多JPanel并使用布局管理器

例如,在需要两行的JPanel中,沿
BoxLayout.PAGE_轴
为其指定一个BoxLayout,然后使用顶部带有单选按钮的JPanel和底部带有JLabel和JTextField的JPanel(或任何您想要的内容)向该BoxLayout添加两个以上的JPanel

旁注:这是一个使用名为TempScale的枚举的好地方,它有三个值:摄氏度、华氏度、开尔文。您甚至可以为枚举提供与开尔文的转换公式

例如:

import java.awt.Component;
import java.awt.event.*;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;

@SuppressWarnings("serial")
public class TempConversion2 extends JPanel {
    private ToFromPanel fromPanel = new ToFromPanel("From", true);
    private ToFromPanel toPanel = new ToFromPanel("To", false);
    private ButtonPanel buttonPanel = new ButtonPanel(fromPanel, toPanel);

    public TempConversion2() {
        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
        add(fromPanel);
        add(toPanel);
        add(buttonPanel);
    }

    private static void createAndShowGui() {
        TempConversion2 mainPanel = new TempConversion2();

        JFrame frame = new JFrame("Temp Convert");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}

@SuppressWarnings("serial")
class ButtonPanel extends JPanel {

    public ButtonPanel(ToFromPanel fromPanel, ToFromPanel toPanel) {
        add(new JButton(new ConvertAction("Convert", fromPanel, toPanel)));
        add(new JButton(new ExitAction("Exit", KeyEvent.VK_X)));
    }

}

@SuppressWarnings("serial")
class ConvertAction extends AbstractAction {
    private ToFromPanel fromPanel;
    private ToFromPanel toPanel;

    public ConvertAction(String name, ToFromPanel fromPanel, ToFromPanel toPanel) {
        super(name);
        int mnemonic = (int) name.charAt(0);
        putValue(MNEMONIC_KEY, mnemonic);
        this.fromPanel = fromPanel;
        this.toPanel = toPanel;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String text = fromPanel.getText();
        try {
            double fromTemp = Double.parseDouble(text.trim());
            TempScale fromScale = fromPanel.getTempScalesPanel().getSelectedTempScale();
            double kelvinValue = fromScale.convertToKelvin(fromTemp);

            TempScale toScale = toPanel.getTempScalesPanel().getSelectedTempScale();
            double toValue = toScale.convertFromKelvin(kelvinValue);

            String toValueString = String.format("%.2f", toValue);
            toPanel.setText(toValueString);
        } catch (NumberFormatException e1) {
            Component parentComponent = fromPanel;
            String message = "Text must be a valid number: " + text;
            String title = "Invalid Text Entered";
            int messageType = JOptionPane.ERROR_MESSAGE;
            JOptionPane.showMessageDialog(parentComponent, message, title, messageType);
            fromPanel.setText("");
        }
    }
}

@SuppressWarnings("serial")
class ExitAction extends AbstractAction {
    public ExitAction(String name, int mnemonic) {
        super(name);
        putValue(MNEMONIC_KEY, mnemonic);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        System.exit(0);
    }
}

@SuppressWarnings("serial")
class ToFromPanel extends JPanel {
    private String title;
    private TempScalesPanel tempScalesPanel = new TempScalesPanel();
    private JTextField tempTextField = new JTextField(3);

    public ToFromPanel(String title, boolean textFieldEnabled) {
        this.title = title;
        tempTextField.setFocusable(textFieldEnabled);

        JPanel bottomPanel = new JPanel();
        bottomPanel.setLayout(new BoxLayout(bottomPanel, BoxLayout.LINE_AXIS));
        bottomPanel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
        bottomPanel.add(new JLabel("Temperature:"));
        bottomPanel.add(Box.createHorizontalStrut(8));
        bottomPanel.add(tempTextField);

        setBorder(BorderFactory.createTitledBorder(title));
        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
        add(tempScalesPanel);
        add(bottomPanel);
    }

    public String getTitle() {
        return title;
    }

    public TempScalesPanel getTempScalesPanel() {
        return tempScalesPanel;
    }

    public String getText() {
        return tempTextField.getText();
    }

    public void setText(String text) {
        tempTextField.setText(text);
    }
}

@SuppressWarnings("serial")
class TempScalesPanel extends JPanel {
    private ButtonGroup buttonGroup = new ButtonGroup();
    private Map<ButtonModel, TempScale> buttonTempMap = new HashMap<>();

    public TempScalesPanel() {
        for (TempScale tempScale : TempScale.values()) {
            JRadioButton radioButton = new JRadioButton(tempScale.getName());
            add(radioButton);
            buttonGroup.add(radioButton);
            buttonTempMap.put(radioButton.getModel(), tempScale);
            // set first button as selected by default
            if (buttonGroup.getSelection() == null) {
                buttonGroup.setSelected(radioButton.getModel(), true);
            }
        }
    }

    public TempScale getSelectedTempScale() {
        ButtonModel model = buttonGroup.getSelection();
        return buttonTempMap.get(model);
    }
}

总是考虑发布一个。 例如,您可以通过以下方式简化和演示布局:

import java.awt.BorderLayout;
import java.awt.Label;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TemperatureConversion extends JFrame{

    JPanel pnlFromRadioButton, pnlToRadioButton, pnlFromTemp, pnlButton;

    // constructor
    public TemperatureConversion(){

        pnlFromRadioButton = new JPanel();
        pnlFromRadioButton.add(new Label("From Panel"));

        pnlToRadioButton = new JPanel();
        pnlToRadioButton.add(new Label("To Panel"));

        pnlButton = new JPanel();
        pnlButton.add(new Label("Buttons Panel"));

        // add panels to the frame
        add(pnlFromRadioButton, BorderLayout.NORTH);
        add(pnlToRadioButton, BorderLayout.CENTER);
        add(pnlButton, BorderLayout.SOUTH);

        setVisible(true);
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new TemperatureConversion();
    }
}
假设您想在From按钮下的不同“行”中显示“输入温度:[]”标签,则构造函数将更改为:


总是考虑发布一个。 例如,您可以通过以下方式简化和演示布局:

import java.awt.BorderLayout;
import java.awt.Label;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TemperatureConversion extends JFrame{

    JPanel pnlFromRadioButton, pnlToRadioButton, pnlFromTemp, pnlButton;

    // constructor
    public TemperatureConversion(){

        pnlFromRadioButton = new JPanel();
        pnlFromRadioButton.add(new Label("From Panel"));

        pnlToRadioButton = new JPanel();
        pnlToRadioButton.add(new Label("To Panel"));

        pnlButton = new JPanel();
        pnlButton.add(new Label("Buttons Panel"));

        // add panels to the frame
        add(pnlFromRadioButton, BorderLayout.NORTH);
        add(pnlToRadioButton, BorderLayout.CENTER);
        add(pnlButton, BorderLayout.SOUTH);

        setVisible(true);
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new TemperatureConversion();
    }
}
假设您想在From按钮下的不同“行”中显示“输入温度:[]”标签,则构造函数将更改为:


抱歉,我是论坛新手,不熟悉@c0der代码的发布礼仪。但使用GridLayout解决了我的问题,我想向你们展示我所做的,这是一个大混乱,但现在是。这是我奇怪的代码,但不知道如何进一步减少它。这就是我想要的样子,因为现在我明白你所说的“嵌套更多的喷气式飞机并使用布局管理器”@装满鳗鱼的气垫船:


顺便说一句,满是鳗鱼的气垫船,你的解决方案比我的思维水平更高效、更先进。我是编程新手,所以请容忍我混乱的代码和组织lol。我几乎没有涉足OOP。我确实了解您是如何将enum用于TempScale的,我感谢您的建议。我将把这些作为参考保存在我的笔记中。

很抱歉,我是论坛新手,不熟悉在@c0der发布代码的礼仪。但使用GridLayout解决了我的问题,我想向你们展示我所做的,这是一个大混乱,但现在是。这是我奇怪的代码,但不知道如何进一步减少它。这就是我想要的样子,因为现在我明白你所说的“嵌套更多的喷气式飞机并使用布局管理器”@装满鳗鱼的气垫船:


顺便说一句,满是鳗鱼的气垫船,你的解决方案比我的思维水平更高效、更先进。我是编程新手,所以请容忍我混乱的代码和组织lol。我几乎没有涉足OOP。我确实了解您是如何将enum用于TempScale的,我感谢您的建议。我将在笔记中保留这些作为参考。

是否希望
输入温度:[]
显示在From单选按钮下?是@c0der。我希望在to单选按钮下显示该温度,以及可比较的温度:[]。是否希望在From单选按钮下显示
输入温度:[]
?是@c0der。我希望它能显示在to单选按钮下,还有可比较的温度:[]所以据我所知,为from容器创建一个JPanel,然后使用我现在拥有的JPanel:pnlFromRadioButton创建另一个面板pnltexterTemperature,即嵌套的JPanel?”代码“pnlFrom.add”(pnlFromRadioButton);pnlFrom.add(pnlTextEnterTemperature)@Ojouk:您的from容器已经是JPanel了。再创建两个——一个用于JRadioButtons,另一个用于JLabel/JTextField组合。例如,请参阅上面的代码,其中还显示了在创建JPanel和执行计算时使用枚举。因此,据我所知,为from容器创建一个JPanel,然后使用我现在拥有的JPanel:pnlFromRadioButton创建另一个面板pnltexterTemperature,即嵌套的JPanel?“代码“pnlFrom.add”(pnlFromRadioButton);pnlFrom.add(pnlTextEnterTemperature)@Ojouk:您的from容器已经是JPanel了。再创建两个——一个用于JRadioButtons,另一个用于JLabel/JTextField组合。例如,请参阅上面的代码,其中还显示了在创建JPanel和执行计算时使用枚举。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.awt.*;

public class TemperatureConversion extends JFrame {

  // component
  JTextField txtFromTemp, txtToTemp;
  JLabel lblFromTemp, lblToTemp, lblToTempbox;
  JRadioButton radFromCelsius, radFromFahrenheit, radFromKelvin;
  JRadioButton radToCelsius, radToFahrenheit, radToKelvin;
  JPanel pnlFromRadioButton, pnlToRadioButton, pnlFrom, pnlTo, pnlButton;
  JPanel pnlEnterTemp, pnlComparableTemp;
  ButtonGroup bgFrom, bgTo;
  JButton btnConvert, btnExit;

  // constructor
  public TemperatureConversion() {
    super("Temperature");

    // assign objects
    radFromCelsius = new JRadioButton("Celsius", true);
    radFromFahrenheit = new JRadioButton("Fahrenheit");
    radFromKelvin = new JRadioButton("Kelvin");
    lblFromTemp = new JLabel("Enter Temperature: ");
    pnlFrom = new JPanel();
    btnConvert = new JButton("Convert");
    btnExit = new JButton("Exit");
    pnlButton = new JPanel();
    txtFromTemp = new JTextField(3);
    lblToTemp = new JLabel("Comparable Temperature: ");
    txtToTemp = new JTextField(3);
    pnlTo = new JPanel();
    pnlEnterTemp = new JPanel();
    pnlComparableTemp = new JPanel();
    pnlFromRadioButton = new JPanel();
    pnlToRadioButton = new JPanel();

    // register the button to a listener
    btnExit.addActionListener(new MyButtonListener());
    btnConvert.addActionListener(new MyButtonListener());

    // make the multiple choice exclusive but not a container
    bgFrom = new ButtonGroup();
    bgFrom.add(radFromCelsius);
    bgFrom.add(radFromFahrenheit);
    bgFrom.add(radFromKelvin);

    // radio buttons
    radToCelsius = new JRadioButton("Celsius");
    radToFahrenheit = new JRadioButton("Fahrenheit", true);
    radToKelvin = new JRadioButton("Kelvin");

    // make the multiple choice exclusive
    bgTo = new ButtonGroup();
    bgTo.add(radToCelsius);
    bgTo.add(radToFahrenheit);
    bgTo.add(radToKelvin);

    pnlFrom.setLayout(new GridLayout(2, 1));
    pnlFrom.add(pnlFromRadioButton);
    pnlFrom.add(pnlEnterTemp);

    pnlTo.setLayout(new GridLayout(2, 1));
    pnlTo.add(pnlToRadioButton);
    pnlTo.add(pnlComparableTemp);


    // decorate the panel
    pnlFrom.setBorder(BorderFactory.createTitledBorder("From"));
    pnlTo.setBorder(BorderFactory.createTitledBorder("To"));

    // add radiobutton to panel
    pnlFromRadioButton.add(radFromCelsius);
    pnlFromRadioButton.add(radFromFahrenheit);
    pnlFromRadioButton.add(radFromKelvin);
    pnlToRadioButton.add(radToCelsius);
    pnlToRadioButton.add(radToFahrenheit);
    pnlToRadioButton.add(radToKelvin);

    // add button to panel
    pnlButton.add(btnConvert);
    pnlButton.add(btnExit);

    // add label and txt field to panel
    pnlEnterTemp.add(lblFromTemp);
    pnlEnterTemp.add(txtFromTemp);
    pnlComparableTemp.add(lblToTemp);
    txtToTemp.setEditable(false);
    pnlComparableTemp.add(txtToTemp);

    // add panels to the frame
    add(pnlFrom, BorderLayout.NORTH);
    add(pnlTo, BorderLayout.CENTER);
    add(pnlButton, BorderLayout.SOUTH);

    setVisible(true);
    setSize(400, 300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
  }


  // private inner class to handle button event
  private class MyButtonListener implements ActionListener {
    // must override actionPerformed method
    @Override
    public void actionPerformed(ActionEvent e) {
      if (e.getSource() == btnConvert) {
        if (radFromCelsius.isSelected() && radToFahrenheit.isSelected()) {
          int strInput = Integer.parseInt(txtFromTemp.getText());
          int celsius = strInput * 9 / 5 + 32;
          txtToTemp.setText(Integer.toString(celsius));
        } else if (radFromCelsius.isSelected() && radToCelsius.isSelected() ||
            radFromFahrenheit.isSelected() && radToFahrenheit.isSelected() ||
            radFromKelvin.isSelected() && radToKelvin.isSelected()) {
         txtToTemp.setText(txtFromTemp.getText());
        } else if (radToCelsius.isSelected() && radFromFahrenheit.isSelected()) {
          int strInput = Integer.parseInt(txtFromTemp.getText());
          int fahrenheit = (strInput - 32) * 5 / 9;
          txtToTemp.setText(Integer.toString(fahrenheit));
        } else if (radFromKelvin.isSelected() && radToCelsius.isSelected()) {
          double strInput = Integer.parseInt(txtFromTemp.getText());
          double celsius = strInput - 273.15;
          txtToTemp.setText(Double.toString(celsius));
        } else if (radFromKelvin.isSelected() && radToFahrenheit.isSelected()) {
          double strInput = Integer.parseInt(txtFromTemp.getText());
          double fahrenheit = strInput - 459.67;
          txtToTemp.setText(Double.toString(fahrenheit));
        } else if (radFromCelsius.isSelected() && radToKelvin.isSelected()) {
          double strInput = Integer.parseInt(txtFromTemp.getText());
          double celsius = strInput + 273.15;
          txtToTemp.setText(Double.toString(celsius));
        } else if (radFromFahrenheit.isSelected() && radToKelvin.isSelected()) {
          double strInput = Integer.parseInt(txtFromTemp.getText());
          double fahrenheit = strInput + 255.37;
          txtToTemp.setText(Double.toString(fahrenheit));
        }
      } else if (e.getSource() == btnExit) {
        System.exit(0);
      }
    }
  }

  public static void main(String[] args) {
    new TemperatureConversion();
  }
}