Radio buttons group with both options enabled - java

I already made a button group for gender, but still both radio buttons were being enabled. I tried interchanging the group of gender to yearlevel. The yearlevel does fine and still the gender both radio buttons being enabled.
here's my code:
public class myFirstGUI extends JFrame {
JPanel panel = new JPanel();
JLabel lblName = new JLabel("Name:");
JLabel lblyl = new JLabel("Year Level:");
JLabel lblCourse = new JLabel("Course:");
JLabel lblProg = new JLabel("Program:");
JLabel lblGender = new JLabel("Gender:"); //Gender
JTextField txtName = new JTextField();
JButton btnSubmit = new JButton("Submit");
JButton btnReset = new JButton("Reset");
GridBagLayout gLayout = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
JComboBox cboProgram = new JComboBox();
JRadioButton rbtn1 = new JRadioButton("1st");
JRadioButton rbtn2 = new JRadioButton("2nd");
JRadioButton rbtn3 = new JRadioButton("3rd");
JRadioButton rbtn4 = new JRadioButton("4th");
JRadioButton rbtn5 = new JRadioButton("5th");
JRadioButton rbtnM = new JRadioButton("Male"); //Gender Male
JRadioButton rbtnF = new JRadioButton("Female"); //Gender Female
JCheckBox chk003a = new JCheckBox("ITE003A");
JCheckBox chk003 = new JCheckBox("CPE003");
JCheckBox chk201 = new JCheckBox("CS201");
ButtonGroup bg = new ButtonGroup();
ButtonGroup bg1 = new ButtonGroup();
public void setYearLevel() {
bg1.add(rbtn1);
bg1.add(rbtn2);
bg1.add(rbtn3);
bg1.add(rbtn4);
bg1.add(rbtn5);
}
public void setGender() { //Gender
bg.add(rbtnM);
bg.add(rbtnF);
}
public void setProgram() {
cboProgram.addItem("CPE");
cboProgram.addItem("IE");
cboProgram.addItem("ECE");
}
public myFirstGUI() {
setYearLevel();
setProgram();
setSize(300, 500);
panel.setBackground(Color.CYAN);
setTitle("My First GUI");
add(panel);
panel.setLayout(gLayout);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.ipadx = 10;
gbc.gridx = 0;
gbc.gridy = 0;
panel.add(lblName, gbc);
gbc.gridx = 1;
gbc.gridy = 0;
panel.add(txtName, gbc);
gbc.gridx = 0;
gbc.gridy = 1;
panel.add(lblGender, gbc);
gbc.gridx = 1;
gbc.gridy = 1;
panel.add(rbtnM, gbc);
gbc.gridx = 1;
gbc.gridy = 2;
panel.add(rbtnF, gbc);
rbtnM.setBackground(Color.cyan);
rbtnF.setBackground(Color.cyan);
gbc.gridx = 0;
gbc.gridy = 3;
panel.add(lblProg, gbc);
gbc.gridx = 1;
gbc.gridy = 3;
panel.add(cboProgram, gbc);
chk003a.setBackground(Color.cyan);
chk003.setBackground(Color.cyan);
chk201.setBackground(Color.cyan);
gbc.gridx = 0;
gbc.gridy = 4;
panel.add(lblCourse, gbc);
gbc.gridx = 1;
gbc.gridy = 4;
panel.add(chk003a, gbc);
gbc.gridx = 1;
gbc.gridy = 5;
panel.add(chk003, gbc);
gbc.gridx = 1;
gbc.gridy = 6;
panel.add(chk201, gbc);
gbc.gridx = 0;
gbc.gridy = 7;
panel.add(lblyl, gbc);
gbc.gridx = 1;
gbc.gridy = 7;
panel.add(rbtn1, gbc);
gbc.gridx = 1;
gbc.gridy = 8;
panel.add(rbtn2, gbc);
gbc.gridx = 1;
gbc.gridy = 9;
panel.add(rbtn3, gbc);
gbc.gridx = 1;
gbc.gridy = 10;
panel.add(rbtn4, gbc);
gbc.gridx = 1;
gbc.gridy = 11;
panel.add(rbtn5, gbc);
rbtn1.setBackground(Color.cyan);
rbtn2.setBackground(Color.cyan);
rbtn3.setBackground(Color.cyan);
rbtn4.setBackground(Color.cyan);
rbtn5.setBackground(Color.cyan);
gbc.gridx = 0;
gbc.gridy = 12;
panel.add(btnReset, gbc);
gbc.gridx = 1;
gbc.gridy = 12;
panel.add(btnSubmit, gbc);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btnSubmit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(myFirstGUI.this, "Welcome " + txtName.getText() +
"\nProgram " + cboProgram.getSelectedItem() +
"\nYear Level: " + getYL());
}
});
btnReset.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
txtName.setText("");
bg.clearSelection();
bg1.clearSelection();
cboProgram.setSelectedIndex(0);
}
});
}
public String getYL() {
if (rbtn1.isSelected())
return "1st";
else if (rbtn2.isSelected())
return "2nd";
else if (rbtn3.isSelected())
return "3rd";
else if (rbtn4.isSelected())
return "4th";
else if (rbtn5.isSelected())
return "5th";
else
return "Please select your level";
}
public static void main(String[] args) {
new myFirstGUI().show();
}
}

I am not sure if you have pasted an incomplete code here or not as I Don't see a call to setGender() function from your program. Since the radio buttons are not assigned to the button group, that can cause the problem.

If you are asking why your JRadioButton for Male are Female are both being selected, this is what you can do.
ButtonGroup group = new ButtonGroup();
group.add(btnM);
group.add(btnF);
You need to group the radio buttons which belong to the same category (group).
After adding them to a group, only one JRadioButton will be selected.

Related

Can't close JFrame, from click inside JPanel

I have the following situation:
I have a JFrame(GridBagLayout) with 3 JPanels in it (headerPanel, bodyPanel, footerPanel);
On the bodyPanel I have a login button;
What I want, is to close the JFrame, an open another one;
Main:
package com.system.reservation.airline;
public class Main {
public static void main(String[] args) { // Main function that executes the program
LoginPage loginPage = new LoginPage();
}
}
LoginPage:
public class LoginPage extends JFrame{
HeaderPanel headerPanel = new HeaderPanel();
BodyPanel bodyPanel = new BodyPanel();
FooterPanel footerPanel = new FooterPanel();
public LoginPage(){ // Constructor
this.setTitle("Login"); // Frame title
this.setSize(400, 600); // Frame size
this.setLocationRelativeTo(null); // Center frame, when launched
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Frame function, on close button (will close)
this.getContentPane().setBackground(new Color(240,248,255)); // Light blue
this.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridheight = 1;
this.add(headerPanel, gbc);
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridheight = 1;
this.add(bodyPanel, gbc);
gbc.gridx = 0;
gbc.gridy = 2;
gbc.gridheight = 3;
this.add(footerPanel, gbc);
this.pack();
this.setVisible(true); // Frame visible
}
}
BodyPanel:
package com.system.reservation.airline.panels;
import com.system.reservation.airline.HomePage;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class BodyPanel extends JPanel implements ActionListener { // Listens to events
JButton login_button;
JTextField userName_txb, password_txb;
JLabel tokenResponse;
String username;
String password;
public void setUsername(String newUsername){
username = newUsername;
}
public String getUsername(){
return username;
}
public void setPassword(String newPassword){
password = newPassword;
}
public String getPassword(){
return password;
}
public BodyPanel(){
Color transparent = new Color(1f,0f,0f,0f);
this.setBackground(transparent);
this.setLayout(new BorderLayout());
//this.setBorder(BorderFactory.createLineBorder(Color.green, 3));
//------------ Login Panel ------------------------
JPanel login_panel = new JPanel(new BorderLayout());
login_panel.setBackground(transparent);
login_panel.setPreferredSize(new Dimension(400, 50));
//login_panel.setBorder(BorderFactory.createLineBorder(Color.YELLOW, 5));
JLabel login_label = new JLabel();
login_label.setText("Login");
login_label.setHorizontalAlignment(JLabel.CENTER);
login_label.setFont(new Font("Arial", Font.PLAIN, 20));
login_panel.add(login_label, BorderLayout.CENTER);
//------------ Login Panel ------------------------
//------------ Input Panel ------------------------
JPanel input_fields_panel = new JPanel(new GridBagLayout());
input_fields_panel.setBackground(transparent);
//input_fields_panel.setPreferredSize(new Dimension(400, 150));
//input_fields_panel.setBorder(BorderFactory.createLineBorder(Color.black, 5));
GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;
//-------------
JLabel userName_label = new JLabel("Username: ");
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.insets = new Insets(0,10,0,0);
input_fields_panel.add(userName_label, gbc);
userName_txb = new JTextField();
userName_txb.setPreferredSize(new Dimension(250,30));
gbc.gridx = 3;
gbc.insets = new Insets(5,0,5,20);
input_fields_panel.add(userName_txb, gbc);
//-------------
//-------------
JLabel password_label = new JLabel("Password: ");
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.insets = new Insets(0,10,0,0);
input_fields_panel.add(password_label, gbc);
password_txb = new JTextField();
password_txb.setPreferredSize(new Dimension(250,30));
gbc.gridx = 1;
gbc.gridy = 1;
gbc.gridwidth = 3;
gbc.gridheight = 1;
gbc.insets = new Insets(5,0,5,20);
input_fields_panel.add(password_txb, gbc);
//-------------
//------ Login Button -----------
login_button = new JButton("Login");
gbc.gridx = 0;
gbc.gridy = 2;
gbc.gridwidth = 4;
gbc.gridheight = 1;
gbc.insets = new Insets(10,150,5,150);
login_button.addActionListener(this);
input_fields_panel.add(login_button, gbc);
//------ Login Button -----------
tokenResponse = new JLabel("");
tokenResponse.setHorizontalAlignment(JLabel.CENTER);
gbc.gridx = 0;
gbc.gridy = 3;
gbc.gridwidth = 4;
gbc.gridheight = 1;
gbc.insets = new Insets(0,0,0,0);
input_fields_panel.add(tokenResponse, gbc);
//------------ Input Panel ------------------------
//-------------------------------------
this.add(login_panel, BorderLayout.NORTH);
this.add(input_fields_panel, BorderLayout.CENTER);
}
#Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == login_button) {
System.out.println("Olá");
//-------------------------
if(userName_txb.getText().replaceAll("\\s+","").equals("") || password_txb.getText().replaceAll("\\s+","").equals("")){ // removes white spaces
// If either of the text fields are empty, a label is displayed
System.out.println("It's empty!");
tokenResponse.setText("The input fields are empty!");
} else {
String userName_value = userName_txb.getText();
String userPassword_value = password_txb.getText();
// User inputs are stored
setUsername(userName_value);
setPassword(userPassword_value);
// User inputs are initialized
//-----------------------
try{
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/user_login", "root", "***********");
// Connect to the database;
Statement statement = connection.createStatement();
// It will initiate a command;
ResultSet resultSet = statement.executeQuery("select customer_username, customer_password from user_authentication");
// Execute the command; // column // table
while (resultSet.next()){ // While there are results, it will print them;
String name = resultSet.getString("customer_username");
String password = resultSet.getString("customer_password");
if(!getUsername().equals(name) || !getPassword().equals(password)){
tokenResponse.setText("The username or the password are incorrect!");
System.out.println("It does not match!");
//break;
} else {
// CLOSE JFRAME
System.out.println("It matches!");
HomePage homePage = new HomePage();
break;
}
}
}catch(Exception e2){
e2.printStackTrace();
}
}
}
}
}
After I click login the JFrame on the left shows up.
I want to close the one on the right.
Any help would be appreciated, thanks.
Answer from #camickr, managed to close Jframe, from click inside Jpanel:
login_button = (JButton) e.getSource();
SwingUtilities.windowForComponent(login_button).dispose();

JRadioButton is not show properly

I want to create a simple food ordering system, now i'm creating the interface of an order form. I used GridBagLayout for create the form layout, my problem is when I want to assign 3 radio button in same row, it's only show me 1 of the button....I hope somebody can help me pls....
Here is my java code:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;
/**
*
* #author user
*/
public class ChickenChopOrderingSystem
{
JFrame frame;
JPanel mainPanel, p1, p2, p3, p4;
JLabel lblTitle, lblName, lblPhoneNum, lblFlavour, lblChickenPart;
JTextField txtName, txtPhoneNum;
String flavour[] = {"Black Pepper Sauce", "Hainanese", "Grilled", "Lemon"};
JComboBox box;
ButtonGroup bg = new ButtonGroup();
JRadioButton btnWhole, btnHalf, btnQuarter;
JButton btnDone, btnExit;
public ChickenChopOrderingSystem()
{
frame = new JFrame("Chicken Chop Ordering System");
mainPanel = new JPanel();
mainPanel.setPreferredSize(new Dimension(700,700));
mainPanel.setBackground(Color.yellow);
lblName = new JLabel("Customer's Name: ");
txtName = new JTextField(20);
lblPhoneNum = new JLabel("Phone Number: ");
txtPhoneNum = new JTextField(11);
lblChickenPart = new JLabel("Select Part of Chicken: ");
btnWhole = new JRadioButton("Whole");
btnWhole.addItemListener(new OperationListener());
btnHalf = new JRadioButton("Half");
btnHalf.addItemListener(new OperationListener());
btnQuarter = new JRadioButton("Quarter");
btnQuarter.addItemListener(new OperationListener());
bg.add(btnWhole);
bg.add(btnHalf);
bg.add(btnQuarter);
lblFlavour = new JLabel("Select a flavour: ");
box = new JComboBox(flavour);
btnDone = new JButton("Done");
btnExit = new JButton("Exit");
btnExit.addActionListener(new ButtonListener());
//GridBaglayout
mainPanel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
//Label
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 0.5;
gbc.weighty = 0.5;
mainPanel.add(lblName, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 0;
gbc.gridy = 1;
gbc.weightx = 0.5;
mainPanel.add(lblPhoneNum, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 0;
gbc.gridy = 2;
gbc.weightx = 0.5;
mainPanel.add(lblChickenPart, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 0;
gbc.gridy = 3;
gbc.weightx = 0.5;
mainPanel.add(lblFlavour, gbc);
//TextField
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 1;
gbc.gridy = 0;
gbc.gridwidth = 3;
mainPanel.add(txtName, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 1;
gbc.gridy = 1;
gbc.gridwidth = 3;
mainPanel.add(txtPhoneNum, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 1;
gbc.gridy = 2;
mainPanel.add(btnWhole, gbc);
gbc.gridx = 2;
gbc.gridy = 2;
mainPanel.add(btnHalf, gbc);
gbc.gridx = 3;
gbc.gridy = 2;
mainPanel.add(btnHalf, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 1;
gbc.gridy = 3;
mainPanel.add(box, gbc);
//frame setting
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridBagLayout());
frame.add(mainPanel, new GridBagConstraints());
frame.setSize(new Dimension(1000, 1000));
frame.setVisible(true);
}
public class OperationListener implements ItemListener
{
#Override
public void itemStateChanged(ItemEvent ie) {
if (ie.getSource() == btnWhole)
{
if (ie.getStateChange() == ItemEvent.SELECTED)
{
box.removeAllItems();
box.addItem(flavour[2]);
}
} if (ie.getSource() == btnHalf)
{
if (ie.getStateChange() == ItemEvent.SELECTED)
{
box.removeAllItems();
box.addItem(flavour[0]);
box.addItem(flavour[2]);
box.addItem(flavour[3]);
}
} if (ie.getSource() == btnQuarter)
{
if (ie.getStateChange() == ItemEvent.SELECTED)
{
box.removeAllItems();
box.addItem(flavour[0]);
box.addItem(flavour[1]);
box.addItem(flavour[3]);
}
}
}
}
public class ButtonListener implements ActionListener
{
#Override
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == btnExit)
{
int s = JOptionPane.showConfirmDialog(null, "Are you sure you want to exit?",
"Exit", JOptionPane.YES_NO_OPTION);
if (s == JOptionPane.YES_OPTION)
{
System.exit(0);
}
}
}
}
public static void main(String[] args)
{
ChickenChopOrderingSystem run = new ChickenChopOrderingSystem();
}
}
Click here to view output
For something like this:
Use this code:
import java.awt.*;
import javax.swing.*;
public class ChickenChopOrderingSystem {
JFrame frame;
JPanel mainPanel, p1, p2, p3, p4;
JLabel lblTitle, lblName, lblPhoneNum, lblFlavour, lblChickenPart;
JTextField txtName, txtPhoneNum;
String flavour[] = {"Black Pepper Sauce", "Hainanese", "Grilled", "Lemon"};
JComboBox box;
ButtonGroup bg = new ButtonGroup();
JRadioButton btnWhole, btnHalf, btnQuarter;
JButton btnDone, btnExit;
public ChickenChopOrderingSystem() {
frame = new JFrame("Chicken Chop Ordering System");
mainPanel = new JPanel();
// GUESSWORK!
//mainPanel.setPreferredSize(new Dimension(700,700));
mainPanel.setBackground(Color.yellow);
lblName = new JLabel("Customer's Name: ");
txtName = new JTextField(20);
lblPhoneNum = new JLabel("Phone Number: ");
txtPhoneNum = new JTextField(11);
lblChickenPart = new JLabel("Select Part of Chicken: ");
btnWhole = new JRadioButton("Whole");
btnHalf = new JRadioButton("Half");
btnQuarter = new JRadioButton("Quarter");
bg.add(btnWhole);
bg.add(btnHalf);
bg.add(btnQuarter);
lblFlavour = new JLabel("Select a flavour: ");
box = new JComboBox(flavour);
btnDone = new JButton("Done");
btnExit = new JButton("Exit");
//GridBaglayout
mainPanel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
int s = 20;
gbc.insets = new Insets(s,s,s,s);
//Label
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 0.5;
gbc.weighty = 0.5;
mainPanel.add(lblName, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 0;
gbc.gridy = 1;
gbc.weightx = 0.5;
mainPanel.add(lblPhoneNum, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 0;
gbc.gridy = 2;
gbc.weightx = 0.5;
mainPanel.add(lblChickenPart, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 0;
gbc.gridy = 3;
gbc.weightx = 0.5;
mainPanel.add(lblFlavour, gbc);
//TextField
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 1;
gbc.gridy = 0;
gbc.gridwidth = 3;
mainPanel.add(txtName, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 1;
gbc.gridy = 1;
gbc.gridwidth = 3;
mainPanel.add(txtPhoneNum, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 1;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.weightx = 1d/6d;
mainPanel.add(btnWhole, gbc);
gbc.gridx = 2;
gbc.gridy = 2;
mainPanel.add(btnHalf, gbc);
gbc.gridx = 3;
gbc.gridy = 2;
mainPanel.add(btnQuarter, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 1;
gbc.gridy = 3;
gbc.gridwidth = 3;
mainPanel.add(box, gbc);
//frame setting
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridBagLayout());
frame.add(mainPanel, new GridBagConstraints());
// GUESSWORK!
//frame.setSize(new Dimension(1000, 1000));
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
ChickenChopOrderingSystem run = new ChickenChopOrderingSystem();
}
}
The problems in the original code were many. (Trawling memory..)
The constraints of the last element were not set back to grid width of 3, confusing the layout manager.
The ItemListener was doing strange stuff with removing components, don't do that.
The preferred size of the panel, and the size of the frame, were guesswork. Use pack() to have the correct size calculated. (Add a standard Inserts to the initial constraints for white space.)

Java checkbox positioning

I'm relatively new to Java and I am creating a login form. The problem I am having is the position of the checkbox seen in the picture below, I am trying to assign it to start directly below the "P" in "Password.
Here is the code:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Login extends JPanel{
private static JLabel usernameLabel, passwordLabel;
private static JTextField usernameField;
private static JPasswordField passwordField;
private static JCheckBox checkBox;
private static JButton loginButton;
GridBagConstraints gbc = new GridBagConstraints();
public Login(){
//layout
setLayout(new GridBagLayout());
//spacing between each component
gbc.insets = new Insets(1,1,1,1);
//new instance of objects
usernameLabel = new JLabel("Username:");
passwordLabel = new JLabel("Password:");
usernameField = new JTextField(10);
passwordField = new JPasswordField(10);
checkBox = new JCheckBox("Keep me logged in");
loginButton = new JButton("Login");
//username label
gbc.anchor = GridBagConstraints.LINE_END;
gbc.gridx = 0;
gbc.gridy = 0;
add(usernameLabel, gbc);
//password label
gbc.gridx = 0;
gbc.gridy = 1;
add(passwordLabel, gbc);
//username textfield
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridx = 1;
gbc.gridy = 0;
add(usernameField, gbc);
//password textfield
gbc.gridx = 1;
gbc.gridy = 1;
add(passwordField, gbc);
//keep logged in checkbox
gbc.gridx = 0;
gbc.gridy = 2;
add(checkBox, gbc);
//login button
gbc.gridx = 1;
gbc.gridy = 3;
add(loginButton, gbc);
}
}
I'm not sure why the checkbox isn't in-line with the labels, any help will be appreciated. Thanks.
try this:
checkBox = new JCheckBox("");
checkBoxLabel = new JLabel("Keep me logged in");
Then when you are adding your components
//keep logged in checkbox
gbc.gridx = 0;
gbc.gridy = 2;
gbc.anchor = GridBagConstraints.WEST;
add(checkBox, gbc);
gbc.gridx = 1;
gbc.gridy = 2;
add(checkBoxLabel);
You have to set the fill Property of GridBagConstraints
//username label
gbc.anchor = GridBagConstraints.LINE_END;
gbc.fill=GridBagConstraints.BOTH;//this will do the trick

can't get my panel on my frame.. what did i do wrong?

I keep getting 2 mini windows popping up. I don't see none of my components from the Jpanel class. I've tried everything I could.. I know I'm doing something wrong but I can't seem to find the bug.
Here's my Jpanel class
public class ComponentsPanel extends JPanel
{
// variable declarations
// constructor
public ComponentsPanel()
{
panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
pLabel = new javax.swing.JLabel("Policy #");
gbc.gridx = 0;
gbc.gridy = 0;
panel.add(pLabel, gbc);
pTextField = new javax.swing.JTextField();
pTextField.setSize(10, 10);
gbc.gridx = 1;
gbc.gridy = 0;
panel.add(pTextField, gbc);
this.pNum = pTextField.getText();
newbLabel = new javax.swing.JLabel("NB Date");
gbc.gridx = 0;
gbc.gridy = 1;
panel.add(newbLabel, gbc);
newbTextField = new javax.swing.JTextField();
gbc.gridx = 1;
gbc.gridy = 1;
panel.add(newbTextField, gbc);
newbButton = new javax.swing.JButton("NEW DATE");
gbc.gridx = 2;
gbc.gridy = 1;
panel.add(newbButton, gbc);
this.newbDate = newbTextField.getText();
biLabel = new javax.swing.JLabel("BI Limits");
gbc.gridx = 0;
gbc.gridy = 2;
panel.add(biLabel, gbc);
biTextField = new javax.swing.JTextField();
gbc.gridx = 1;
gbc.gridy = 2;
panel.add(biTextField, gbc);
bilimButton = new javax.swing.JComboBox<>(bilimits);
bilimButton.setToolTipText("Choose Verified BILimits");
gbc.gridx = 2;
gbc.gridy = 2;
panel.add(bilimButton, gbc);
bicslButton = new javax.swing.JComboBox<>(bicsl);
gbc.gridx = 3;
gbc.gridy = 2;
panel.add(bicslButton, gbc);
this.biLimit = biTextField.getText();
lapseLabel = new javax.swing.JLabel("Lapse #");
gbc.gridx = 0;
gbc.gridy = 3;
panel.add(lapseLabel, gbc);
lapseTextField = new javax.swing.JTextField();
gbc.gridx = 1;
gbc.gridy = 3;
panel.add(lapseTextField, gbc);
lapseButton = new javax.swing.JComboBox<>(lapse);
for (int i = 0; i < lapse.length; i++)
{
lapse[i] = Integer.toString(i);
if (i < 10)
lapse[i] = "0" + Integer.toString(i);
}
lapseButton.setModel(new DefaultComboBoxModel(lapse));
gbc.gridx = 2;
gbc.gridy = 3;
panel.add(lapseButton, gbc);
this.lapses = lapseTextField.getText();
noChangeButton = new javax.swing.JButton("NO CHANGE");
gbc.gridx = 0;
gbc.gridy = 4;
panel.add(noChangeButton, gbc);
changeButton = new javax.swing.JButton("CHANGE");
gbc.gridx = 1;
gbc.gridy = 4;
panel.add(changeButton, gbc);
decButton = new javax.swing.JButton("DECREASE");
gbc.gridx = 2;
gbc.gridy = 4;
panel.add(decButton, gbc);
incButton = new javax.swing.JButton("INCREASE");
gbc.gridx = 3;
gbc.gridy = 4;
panel.add(incButton, gbc);
cpyButton = new javax.swing.JButton("COPY");
cpyButton.setToolTipText("copy comment");
gbc.gridx = 0;
gbc.gridy = 5;
panel.add(cpyButton, gbc);
clrButton = new javax.swing.JButton("CLEAR");
clrButton.setToolTipText("clear all fields");
gbc.gridx = 3;
gbc.gridy = 5;
panel.add(clrButton, gbc);
dispTextArea = new javax.swing.JTextArea(10,10);
dispTextArea.setEditable(true);
dispTextArea.setLineWrap(true);
dispTextArea.setColumns(20);
dispTextArea.setRows(5);
panel.add(dispTextArea);
gbc.gridx = 0;
gbc.gridy = 6;
gbc.weightx = 0.5;
gbc.gridwidth = 4;
gbc.anchor = GridBagConstraints.PAGE_END;
panel.add(dispTextArea,gbc);
// adding listeners to components
// registering all components with their respective listeners
CompHandler compHandler = new CompHandler();
pTextField.addActionListener(compHandler);
biTextField.addActionListener(compHandler);
newbTextField.addActionListener(compHandler);
bilimButton.addActionListener(compHandler);
bicslButton.addActionListener(compHandler);
noChangeButton.addActionListener(compHandler);
changeButton.addActionListener(compHandler);
decButton.addActionListener(compHandler);
incButton.addActionListener(compHandler);
decButton.addActionListener(compHandler);
cpyButton.addActionListener(compHandler);
clrButton.addActionListener(compHandler);
}
// class to handle text fields
private class CompHandler implements ActionListener
{
#Override
public void actionPerformed(ActionEvent e) {}
} // end component handler class
}
Here's my Jframe class with the main method:
public class MyWindow extends JFrame
{
public MyWindow()
{
super ("FNA");
setSize(300,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ComponentsPanel pane = new ComponentsPanel();
add(pane);
setVisible(true);
}
public static void main(String[] args)
{
// TODO code application logic here
} // end of main
In your ComponentsPanel you create an instance of JPanel call panel, but never add it to anything.
Unless you're doing a more complex layout, you could just get rid of it and add you components directly to the ComponentsPanel itself
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class MyWindow extends JFrame
{
public MyWindow()
{
super("FNA");
setSize(300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ComponentsPanel pane = new ComponentsPanel();
add(pane);
setVisible(true);
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
#Override
public void run()
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex)
{
ex.printStackTrace();
}
new MyWindow();
}
});
}
public class ComponentsPanel extends JPanel
{
private final JLabel pLabel;
private final String pNum;
private final String newbDate;
private final String biLimit;
private final String lapses;
// variable declarations
// constructor
public ComponentsPanel()
{
GridBagConstraints gbc = new GridBagConstraints();
pLabel = new javax.swing.JLabel("Policy #");
gbc.gridx = 0;
gbc.gridy = 0;
add(pLabel, gbc);
JTextField pTextField = new javax.swing.JTextField();
pTextField.setSize(10, 10);
gbc.gridx = 1;
gbc.gridy = 0;
add(pTextField, gbc);
this.pNum = pTextField.getText();
JLabel newbLabel = new javax.swing.JLabel("NB Date");
gbc.gridx = 0;
gbc.gridy = 1;
add(newbLabel, gbc);
JTextField newbTextField = new javax.swing.JTextField();
gbc.gridx = 1;
gbc.gridy = 1;
add(newbTextField, gbc);
JButton newbButton = new javax.swing.JButton("NEW DATE");
gbc.gridx = 2;
gbc.gridy = 1;
add(newbButton, gbc);
this.newbDate = newbTextField.getText();
JLabel biLabel = new javax.swing.JLabel("BI Limits");
gbc.gridx = 0;
gbc.gridy = 2;
add(biLabel, gbc);
JTextField biTextField = new javax.swing.JTextField();
gbc.gridx = 1;
gbc.gridy = 2;
add(biTextField, gbc);
JComboBox<Object> bilimButton = new javax.swing.JComboBox<>();
bilimButton.setToolTipText("Choose Verified BILimits");
gbc.gridx = 2;
gbc.gridy = 2;
add(bilimButton, gbc);
JComboBox<Object> bicslButton = new javax.swing.JComboBox<>();
gbc.gridx = 3;
gbc.gridy = 2;
add(bicslButton, gbc);
this.biLimit = biTextField.getText();
JLabel lapseLabel = new javax.swing.JLabel("Lapse #");
gbc.gridx = 0;
gbc.gridy = 3;
add(lapseLabel, gbc);
JTextField lapseTextField = new javax.swing.JTextField();
gbc.gridx = 1;
gbc.gridy = 3;
add(lapseTextField, gbc);
JComboBox<Object> lapseButton = new javax.swing.JComboBox<>();
// for (int i = 0; i < lapse.length; i++)
// {
// lapse[i] = Integer.toString(i);
// if (i < 10)
// {
// lapse[i] = "0" + Integer.toString(i);
// }
// }
// lapseButton.setModel(new DefaultComboBoxModel(lapse));
gbc.gridx = 2;
gbc.gridy = 3;
add(lapseButton, gbc);
this.lapses = lapseTextField.getText();
JButton noChangeButton = new javax.swing.JButton("NO CHANGE");
gbc.gridx = 0;
gbc.gridy = 4;
add(noChangeButton, gbc);
JButton changeButton = new javax.swing.JButton("CHANGE");
gbc.gridx = 1;
gbc.gridy = 4;
add(changeButton, gbc);
JButton decButton = new javax.swing.JButton("DECREASE");
gbc.gridx = 2;
gbc.gridy = 4;
add(decButton, gbc);
JButton incButton = new javax.swing.JButton("INCREASE");
gbc.gridx = 3;
gbc.gridy = 4;
add(incButton, gbc);
JButton cpyButton = new javax.swing.JButton("COPY");
cpyButton.setToolTipText("copy comment");
gbc.gridx = 0;
gbc.gridy = 5;
add(cpyButton, gbc);
JButton clrButton = new javax.swing.JButton("CLEAR");
clrButton.setToolTipText("clear all fields");
gbc.gridx = 3;
gbc.gridy = 5;
add(clrButton, gbc);
JTextArea dispTextArea = new javax.swing.JTextArea(10, 10);
dispTextArea.setEditable(true);
dispTextArea.setLineWrap(true);
dispTextArea.setColumns(20);
dispTextArea.setRows(5);
add(dispTextArea);
gbc.gridx = 0;
gbc.gridy = 6;
gbc.weightx = 0.5;
gbc.gridwidth = 4;
gbc.anchor = GridBagConstraints.PAGE_END;
add(dispTextArea, gbc);
// adding listeners to components
// registering all components with their respective listeners
CompHandler compHandler = new CompHandler();
pTextField.addActionListener(compHandler);
biTextField.addActionListener(compHandler);
newbTextField.addActionListener(compHandler);
bilimButton.addActionListener(compHandler);
bicslButton.addActionListener(compHandler);
noChangeButton.addActionListener(compHandler);
changeButton.addActionListener(compHandler);
decButton.addActionListener(compHandler);
incButton.addActionListener(compHandler);
decButton.addActionListener(compHandler);
cpyButton.addActionListener(compHandler);
clrButton.addActionListener(compHandler);
}
// class to handle text fields
private class CompHandler implements ActionListener
{
#Override
public void actionPerformed(ActionEvent e) {}
} // end component handler class
}
}

Messed-up GUI: Lot of Blank Space

Please have a look at the following code
package email;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SendEmail extends JDialog
{
private JLabel to, cc, bcc, subject, account;
private JTextField toTxt, ccTxt, bccTxt, subjectTxt;
private JTextArea messageTxt;
private JButton send;
private JComboBox accountBox;
private JScrollPane scroll;
private GridBagLayout gbl;
private GridBagConstraints gbc;
public SendEmail()
{
//Declaring instance variables
to = new JLabel("To: ");
cc = new JLabel("CC: ");
bcc = new JLabel("BCC: ");
subject = new JLabel("Subject: ");
account = new JLabel("Select an Account: ");
toTxt = new JTextField(20);
ccTxt = new JTextField(20);
bccTxt = new JTextField(20);
subjectTxt = new JTextField(20);
messageTxt = new JTextArea(500,500);
scroll = new JScrollPane(messageTxt);
accountBox = new JComboBox();
accountBox.addItem("Yahoo");
accountBox.addItem("GMail");
accountBox.addItem("MSN");
//accountBox.addItem("Yahoo");
//accountBox.addItem("Yahoo");
//Creating thr GUI
gbl = new GridBagLayout();
gbc = new GridBagConstraints();
this.setLayout(gbl);
gbc.gridx = 1;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.BOTH;
this.add(account,gbc);
gbc.gridx = 2;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.BOTH;
this.add(accountBox,gbc);
gbc.gridx = 1;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.BOTH;
this.add(to,gbc);
gbc.gridx = 2;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.BOTH;
this.add(toTxt,gbc);
gbc.gridx = 1;
gbc.gridy = 3;
gbc.fill = GridBagConstraints.BOTH;
this.add(bcc,gbc);
gbc.gridx = 2;
gbc.gridy = 3;
gbc.fill = GridBagConstraints.BOTH;
this.add(bccTxt,gbc);
gbc.gridx = 1;
gbc.gridy = 4;
gbc.fill = GridBagConstraints.BOTH;
this.add(cc,gbc);
gbc.gridx = 2;
gbc.gridy = 4;
gbc.fill = GridBagConstraints.BOTH;
this.add(ccTxt,gbc);
gbc.gridx = 1;
gbc.gridy = 5;
gbc.fill = GridBagConstraints.BOTH;
this.add(subject,gbc);
gbc.gridx = 2;
gbc.gridy = 5;
gbc.fill = GridBagConstraints.BOTH;
this.add(subjectTxt,gbc);
gbc.gridx = 1;
gbc.gridy = 6;
gbc.fill = GridBagConstraints.BOTH;
this.add(scroll,gbc);
this.setSize(new Dimension(200,500));
this.setVisible(true);
}
}
In here, the GUI seems very bad. I need to have enough space for all the fields. In the JTextArea, you can see it is not even visible. I need it's height to be 2 columns; it seems like all these problems are occurring because it is trying to set the large JTextArea to one column. For your information, this is an "Compose Email" GUI, so you can be clear of what I am asking. I used this.pack() but it made everything worst!
As I mentioned above in the comments:
Don't call setSize(). Instead pack() the GUI and let the component's natural preferred sizes and the layouts dictate the size of the GUI. If pack() makes things worse, then you should fix the problem from that side of things, not by calling setSize().
For instance, I would
make the JTextArea a reasonable size, not 500 rows by 500 cols!
Don't set size of things
Do call pack()
Don't forget to use weightx and weighty (added to the code) and insets (not yet added).
Avoid magic numbers.
Consider nesting easier to use layouts and minimizing use of GridBagLayout.
Give the JScrollPane extra gridwidth to allow it to fill up the bottom. For instance:
SendEmail.java:
import java.awt.*;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;
#SuppressWarnings("serial")
public class SendEmail extends JDialog {
public final static String[] LABEL_TEXTS = { "Select an Account:", "To:",
"BCC:", "CC:", "Subject:" };
public final static String[] ACCOUNT_TEXTS = { "Yahoo", "GMail", "MSN" };
private static final int TEXT_FIELD_LENGTH = 20;
private static final int T_AREA_ROWS = 20;
private static final int T_AREA_COLS = 50;
private static final int INSET_GAP = 1;
private static final int RIGHT_INSET_GAP = 15;
private Map<String, JTextField> fieldMap = new HashMap<String, JTextField>();
private JTextArea messageTxt;
private JButton send;
private JComboBox<String> accountBox;
private JScrollPane scroll;
public SendEmail(JFrame frame) {
super(frame, "Dialog", true);
messageTxt = new JTextArea(T_AREA_ROWS, T_AREA_COLS);
scroll = new JScrollPane(messageTxt);
accountBox = new JComboBox<String>(ACCOUNT_TEXTS);
this.setLayout(new GridBagLayout());
int ebGap = 5;
((JPanel) getContentPane()).setBorder(BorderFactory.createEmptyBorder(
ebGap, ebGap, ebGap, ebGap));
for (int i = 0; i < LABEL_TEXTS.length; i++) {
JLabel label = new JLabel(LABEL_TEXTS[i]);
addLabel(0, i, label);
if (i == 0) {
addField(1, i, accountBox);
} else {
JTextField tField = new JTextField(TEXT_FIELD_LENGTH);
fieldMap.put(LABEL_TEXTS[i], tField);
addField(1, i, tField);
}
}
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = LABEL_TEXTS.length;
gbc.gridwidth = 2;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(INSET_GAP, INSET_GAP, INSET_GAP, INSET_GAP);
this.add(scroll, gbc);
pack();
this.setVisible(true);
}
private void addField(int x, int y, JComponent comp) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = x;
gbc.gridy = y;
gbc.weightx = 1.0;
gbc.weighty = 0.0;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(INSET_GAP, INSET_GAP, INSET_GAP, INSET_GAP);
gbc.anchor = GridBagConstraints.EAST;
this.add(comp, gbc);
}
private void addLabel(int x, int y, JComponent comp) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = x;
gbc.gridy = y;
gbc.weightx = 0.0;
gbc.weighty = 0.0;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(INSET_GAP, INSET_GAP, INSET_GAP, RIGHT_INSET_GAP);
gbc.anchor = GridBagConstraints.EAST;
this.add(comp, gbc);
}
public String getTextFieldText(String key) {
JTextField tField = fieldMap.get(key);
if (tField == null) {
String text = "key, " + key + " not a valid argument for fieldMap";
throw new IllegalArgumentException(text);
}
return tField.getText();
}
public String getAccountText() {
return accountBox.getSelectedItem().toString();
}
public String getMessageTxt() {
return messageTxt.getText();
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
new SendEmail(frame);
frame.dispose();
}
}
which when run would look like:

Categories

Resources