I am new to Java Swing.I want to design one JToolBar. The JToolBar should be placed on the right of JPanel with the minimize, restore and close icons just like the one shown in the image below:-
panelCont.setLayout(cl);
JPanel titlePanel = new JPanel();
titlePanel.setLayout(new BorderLayout());
JPanel panel1 = new JPanel();
panel1.createToolTip();
panel1.setBorder(BorderFactory.createTitledBorder("Add Products"));
JPanel panel2 = new JPanel();
panel2.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
JLabel lab = new JLabel("Add Company");
JTextField tf = new JTextField(20);
JButton btn = new JButton("Add");
gbc.gridx = 2;
gbc.gridy = 1;
gbc.weightx= 0.5;
gbc.ipadx = 0;
// gbc.insets = new Insets(20, 10, 10, 0);
panel2.add(lab, gbc);
gbc.gridx = 2;
gbc.gridy = 2;
gbc.weightx= 0.5;
gbc.ipadx = 0;
// gbc.insets = new Insets(20, 10, 10, 0);
panel2.add(tf, gbc);
gbc.gridx = 2;
gbc.gridy = 3;
gbc.weightx= 0.5;
gbc.ipadx = 0;
// gbc.insets = new Insets(20, 10, 10, 0);
panel2.add(btn, gbc);
titlePanel.add(BorderLayout.NORTH, panel1);
titlePanel.add(BorderLayout.CENTER, panel2);
panelCont.add(titlePanel, "1");
// panelCont.set
cl.show(panelCont, "1");
// frame1.add(BorderLayout.CENTER , titlePanel);
frame1.add(BorderLayout.CENTER , panelCont);
frame1.setVisible(true);
}
i have written that but didn't get the desired output please help me. Thanks in advance.
Related
I am trying to create game with a similar layout to Wordle where there is a 5 letter scrambled word displayed and below it there are 5 separate text fields for the user to input what order the letters of the scrambled word will go in. Basically they have to unscramble the word. Sorry for the bad explanation.
Iam trying to make rectangles/squares around each of the letters of the JLabels lb1, lb2, lb3, lb4, lb5 and around each of the JTextFields tf1, tf2, tf3, tf4, tf5. I cannot figure out how to display these rectangles at all but also how they will display on top of JPanels that are already in place.
Also just a bonus here, Is there anyway to organise these labels and text fields so that i can set there exact position? i would like to have 5 of the labels on top of 5 of the text fields.
import java.awt.*;
import javax.swing.*;
public class scramble extends JFrame {
Font mainFont = new Font("Impact", Font.BOLD, 60);
Font smallFont = new Font("Impact", Font.BOLD, 30);
JLabel lbWelcome;
JLabel lb1, lb2, lb3, lb4, lb5;
JTextField tf1, tf2, tf3, tf4, tf5;
JFrame frame;
GridBagConstraints gbc = new GridBagConstraints();
scramble() {
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.PAGE_START;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
//mainPanel
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new GridBagLayout());
mainPanel.setBackground(new Color(12, 177, 237));
mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 40, 30, 40));
//header/title
lbWelcome = new JLabel("Scramble", SwingConstants.CENTER);
lbWelcome.setFont(mainFont);
lbWelcome.setToolTipText("Scramble is a game created by Glen Filson");
gbc.gridx = 0;
gbc.gridy = 0;
mainPanel.add(lbWelcome, gbc);
//input panel
JPanel inputs = new JPanel();
inputs.setSize(new Dimension(300,300));
inputs.setBackground(new Color(12, 177, 200));
inputs.setLayout(new GridBagLayout());
gbc.gridx = 0;
gbc.gridy = 3;
mainPanel.add(inputs, gbc);
gbc.insets = new Insets(30, 10,30,10);
//JLabels main
lb1 = new JLabel("F", SwingConstants.CENTER);
lb1.setFont(smallFont);
gbc.gridx = 0;
gbc.gridy = 0;
inputs.add(lb1, gbc);
lb2 = new JLabel("I", SwingConstants.CENTER);
lb2.setFont(smallFont);
gbc.gridx = 1;
gbc.gridy = 0;
inputs.add(lb2, gbc);
lb3 = new JLabel("G", SwingConstants.CENTER);
lb3.setFont(smallFont);
gbc.gridx = 2;
gbc.gridy = 0;
inputs.add(lb3, gbc);
lb4 = new JLabel("H", SwingConstants.CENTER);
lb4.setFont(smallFont);
gbc.gridx = 3;
gbc.gridy = 0;
inputs.add(lb4, gbc);
lb5 = new JLabel("T", SwingConstants.CENTER);
lb5.setFont(smallFont);
gbc.gridx = 4;
gbc.gridy = 0;
inputs.add(lb5, gbc);
//JTextField main
tf1 = new JTextField("s");
tf1.setFont(smallFont);
tf1.setHorizontalAlignment(JTextField.CENTER);
gbc.gridx = 0;
gbc.gridy = 1;
inputs.add(tf1, gbc);
tf2 = new JTextField("u");
tf2.setFont(smallFont);
tf2.setHorizontalAlignment(JTextField.CENTER);
gbc.gridx = 1;
gbc.gridy = 1;
inputs.add(tf2, gbc);
tf3 = new JTextField("s");
tf3.setFont(smallFont);
tf3.setHorizontalAlignment(JTextField.CENTER);
gbc.gridx = 2;
gbc.gridy = 1;
inputs.add(tf3, gbc);
tf4 = new JTextField("s");
tf4.setFont(smallFont);
tf4.setHorizontalAlignment(JTextField.CENTER);
gbc.gridx = 3;
gbc.gridy = 1;
inputs.add(tf4, gbc);
tf5 = new JTextField("y");
tf5.setFont(smallFont);
tf5.setHorizontalAlignment(JTextField.CENTER);
gbc.gridx = 4;
gbc.gridy = 1;
inputs.add(tf5, gbc);
//JFrame
JFrame frame = new JFrame();
frame.setTitle("Scramble");
frame.setSize(500, 650);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().setBackground(new Color(100, 60, 100));
frame.setVisible(true);
frame.add(mainPanel);
}
public static void main(String[] args){
scramble myFrame = new scramble();
}
public class graphicsPanel extends JPanel {
public void paint(Graphics g ){
Graphics g2d = (Graphics2D) g;
g2d.drawRect(250,325,300,300);
}
}
}
There are solutions to everything you asked. So let's see from where to take it.
you can add a border to any JComponent and it's subclasses. Just use setBorder().
To have a JLabel with rectangles around each of the letters, you probably are better off not using a JLabel at all. Subclass JComponent, add a String property so you know which text to render, then override the paintComponent() method. All you need is to loop over the string's characters, calculate the character size via the GraphicsContext and the Font, add space for your box. Then draw the box using g.drawRect(), finally g.drawString().
To organize the position use LayoutMangers. GridBagLayout is the most powerful one and will do anything you require. Check out the nice tutorial.
I have a little Java swing GUI with a GridBagLayout. I have set the GridBagConstraints.fill = GridBagConstraints.BOTH but don't want that my buttons or text fields to get resized vertically. Furthermore, I only want my JTextArea to be resized and tried putting in maximum size for the components I don't want to size up, but it is not working. Any ideas on how I can make the GBC.fill only applicable for some components?
Reproducible example:
public class Main {
static JFrame frame = new JFrame("Create New Entry");
static JPanel wrapper = new JPanel();
static JTextField title = new JTextField(20);
static JLabel titleLabel = new JLabel("Title");
static JTextField username = new JTextField(20);
static JLabel usernameLabel = new JLabel("Username");
static JTextField email = new JTextField(20);
static JLabel emailLabel = new JLabel("Email Address");
static JPasswordField password = new JPasswordField(20);
static JLabel passwordLabel = new JLabel("Password");
static JButton generatePassword = new JButton("Generate Password");
static JPasswordField confirmPassword = new JPasswordField();
static JLabel confirmPasswordLabel = new JLabel("Confirm Password");
static JToggleButton showPassword = new JToggleButton("Show Password");
static JButton submit = new JButton("Submit Entry");
static JLabel notesLabel = new JLabel("Notes");
static JTextArea textArea = new JTextArea(5, 0);
static JScrollPane scrollPane = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
public static void main(String[] args) {
GridBagConstraints gbc = new GridBagConstraints();
wrapper.setLayout(new GridBagLayout());
gbc.gridwidth = GridBagConstraints.RELATIVE;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(10, 10, 10, 10);
gbc.weightx = 1;
gbc.weighty = 1;
gbc.gridwidth = 1;
gbc.gridx = 0;
gbc.gridy = 0;
wrapper.add(titleLabel, gbc);
gbc.gridx = 1;
gbc.gridwidth = 2;
wrapper.add(title, gbc);
gbc.gridwidth = 1;
gbc.gridx = 0;
gbc.gridy = 1;
wrapper.add(usernameLabel, gbc);
gbc.gridx = 1;
gbc.gridwidth = 2;
wrapper.add(username, gbc);
gbc.gridwidth = 1;
gbc.gridx = 0;
gbc.gridy = 2;
wrapper.add(emailLabel, gbc);
gbc.gridx = 1;
gbc.gridwidth = 2;
wrapper.add(email, gbc);
gbc.gridwidth = 1;
gbc.gridx = 0;
gbc.gridy = 3;
wrapper.add(passwordLabel, gbc);
gbc.gridx = 1;
wrapper.add(password, gbc);
gbc.gridx = 2;
wrapper.add(generatePassword, gbc);
gbc.gridwidth = 1;
gbc.gridx = 0;
gbc.gridy = 4;
wrapper.add(confirmPasswordLabel, gbc);
gbc.gridx = 1;
wrapper.add(confirmPassword, gbc);
gbc.gridx = 2;
wrapper.add(showPassword, gbc);
gbc.gridx = 0;
gbc.gridy = 5;
wrapper.add(notesLabel, gbc);
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 1;
gbc.gridwidth = 2;
wrapper.add(scrollPane, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridwidth = 3;
gbc.gridy = 6;
wrapper.add(submit, gbc);
password.setPreferredSize(new Dimension(300, 26));
confirmPassword.setPreferredSize(new Dimension(300, 26));
title.setPreferredSize(new Dimension(300, 26));
username.setPreferredSize(new Dimension(300, 26));
email.setPreferredSize(new Dimension(300, 26));
frame.add(wrapper);
frame.pack();
frame.setMinimumSize(frame.getSize());
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Any ideas on how I can make the GBC.fill only applicable for some components?
Yes. Don't have all components use a GridBagConstraints object whose fill field is .BOTH. Each component should be added with its own GBC object, and the ones you want filled both horizontally and vertically should have the fill property set to .BOTH, and the components that should only expand horizontally should have GBC fill field of .HORIZONTAL. When I use the GridBagLayout, I often create helper method(s) for creating constraint objects, methods that know what settings to use based on parameters passed into them, and I suggest that you consider doing the same.
As Abra mentions, yes, you can modify a GridBagConstraints (GBC) object, by changing the settings of one or more fields as necessary, and I sometimes do this too, but more often, I use helper methods to create GBC objects on the fly. It just works better for me that way.
For example:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.*;
public class Main2 extends JPanel {
private static final long serialVersionUID = 1L;
private static final int FIELD_COLS = 20;
private static final int TA_ROWS = 10;
private static final int INGS_GAP = 10;
private JLabel titleLabel = new JLabel("Title");
private JLabel userNameLabel = new JLabel("Username");
private JLabel emailAddrLabel = new JLabel("EmailAddress");
private JLabel passwordLabel = new JLabel("Password");
private JLabel confirmPasswordLabel = new JLabel("Confirm Password");
private JLabel notesLabel = new JLabel("Notes");
private JTextField titleField = new JTextField(FIELD_COLS);
private JTextField userNameField = new JTextField(FIELD_COLS);
private JTextField emailField = new JTextField(FIELD_COLS);
private JPasswordField passwordField = new JPasswordField(FIELD_COLS);
private JPasswordField confirmPasswordField = new JPasswordField(FIELD_COLS);
private JTextArea NotesArea = new JTextArea(TA_ROWS, FIELD_COLS);
private JScrollPane textAreaScrollPane = new JScrollPane(NotesArea);
private JButton generatePasswordBtn = new JButton("Generate Password");
private JButton showPasswordBtn = new JButton("Show Password");
private JButton submitEntryBtn = new JButton("Submit Entry");
public Main2() {
setLayout(new GridBagLayout());
// basic GBC use
int row = 0;
GridBagConstraints gbc = createGbc(0, row, GridBagConstraints.HORIZONTAL);
add(titleLabel, gbc);
gbc = createGbc(1, row, GridBagConstraints.HORIZONTAL, 2, 1);
add(titleField, gbc);
row++;
gbc = createGbc(0, row, GridBagConstraints.HORIZONTAL);
add(userNameLabel, gbc);
gbc = createGbc(1, row, GridBagConstraints.HORIZONTAL, 2, 1);
add(userNameField, gbc);
row++;
gbc = createGbc(0, row, GridBagConstraints.HORIZONTAL);
add(emailAddrLabel, gbc);
gbc = createGbc(1, row, GridBagConstraints.HORIZONTAL, 2, 1);
add(emailField, gbc);
row++;
gbc = createGbc(0, row, GridBagConstraints.HORIZONTAL);
add(passwordLabel, gbc);
gbc = createGbc(1, row, GridBagConstraints.HORIZONTAL);
add(passwordField, gbc);
gbc = createGbc(2, row, GridBagConstraints.HORIZONTAL);
add(generatePasswordBtn, gbc);
row++;
gbc = createGbc(0, row, GridBagConstraints.HORIZONTAL);
add(confirmPasswordLabel, gbc);
gbc = createGbc(1, row, GridBagConstraints.HORIZONTAL);
add(confirmPasswordField, gbc);
gbc = createGbc(2, row, GridBagConstraints.HORIZONTAL);
add(showPasswordBtn, gbc);
// here we set the GBC weighty to non-0 value to allow vertical expansion
// of added components
row++;
int txtAreaRows = TA_ROWS;
gbc = createGbc(0, row, GridBagConstraints.HORIZONTAL);
gbc.anchor = GridBagConstraints.WEST;
gbc.weighty = 1.0;
add(notesLabel, gbc);
gbc = createGbc(1, row, GridBagConstraints.BOTH, 2, txtAreaRows);
gbc.weighty = 1.0;
add(textAreaScrollPane, gbc);
textAreaScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
row += txtAreaRows;
gbc = createGbc(0, row, GridBagConstraints.HORIZONTAL);
add(new JLabel(""), gbc);
gbc = createGbc(1, row, GridBagConstraints.HORIZONTAL, 2, 1);
add(submitEntryBtn, gbc);
}
private static GridBagConstraints createGbc(int x, int y, int fill, int width, int height) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = width;
gbc.gridheight = height;
gbc.fill = fill;
// allow horizontal expansion *unless* at left-most position in row
gbc.weightx = x == 0 ? 0.0 : 1.0;
gbc.weighty = 0.0; // default to no vertical expansion
gbc.insets = new Insets(INGS_GAP, INGS_GAP, INGS_GAP, INGS_GAP);
return gbc;
}
private static GridBagConstraints createGbc(int x, int y, int fill) {
return createGbc(x, y, fill, 1, 1);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
Main2 mainPanel = new Main2();
JFrame frame = new JFrame("GUI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}
I am using Netbeans Design to design a user interface.
I have a JPanel result_container inside a JScrollPane jsp_result to display the search result.
This is how I display the search result using loop:
public void displayResult(boolean isEmpty)
{
int count = al_isbn.size();
JButton[] btn_detail = new JButton[count];
JLabel[] lbl_num = new JLabel[count];
JLabel[] lbl_isbn = new JLabel[count];
JLabel[] lbl_book_name = new JLabel[count];
JLabel[] lbl_availability = new JLabel[count];
JLabel lbl_head_num = new JLabel("No.");
JLabel lbl_head_isbn = new JLabel("ISBN");
JLabel lbl_head_name = new JLabel("Book Name");
JLabel lbl_head_availability = new JLabel("Availability");
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
Dimension size;
gbc.insets = new Insets(5, 5, 5, 5);
gbc.anchor = GridBagConstraints.NORTHWEST;
result_container.setLayout(gbl);
result_container.removeAll();
result_container.removeAll();
frmSize = this.getPreferredSize();
size = result_container.getPreferredSize();
Insets insets = this.getInsets();
if(isEmpty)
{
jsp_result.remove(result_container);
}
else
{
if(count > 0)
{
/**********set empty spacing**********/
JPanel pane_isbn = new JPanel(new FlowLayout());
pane_isbn.setPreferredSize(new Dimension(100, pane_isbn.getHeight()));
JPanel pane_name = new JPanel(new FlowLayout());
pane_name.setPreferredSize(new Dimension(300, pane_name.getHeight()));
JPanel pane_category = new JPanel(new FlowLayout());
pane_category.setPreferredSize(new Dimension(150, pane_category.getHeight()));
JPanel pane_btn = new JPanel(new FlowLayout());
pane_btn.setPreferredSize(new Dimension(100, pane_btn.getHeight()));
gbc.gridx = 0;
gbc.gridy = 0;
//gbl.setConstraints(lbl_head_num, gbc);
//result_container.add(lbl_head_num);
gbc.gridx = 1;
gbl.setConstraints(pane_isbn, gbc);
result_container.add(pane_isbn);
gbc.gridx = 2;
gbl.setConstraints(pane_name, gbc);
result_container.add(pane_name);
gbc.gridx = 4;
gbl.setConstraints(pane_btn, gbc);
result_container.add(pane_btn);
/**********set heading**********/
gbc.gridx = 0;
gbc.gridy = 1;
gbl.setConstraints(lbl_head_num, gbc);
result_container.add(lbl_head_num);
gbc.gridx = 1;
gbl.setConstraints(lbl_head_isbn, gbc);
result_container.add(lbl_head_isbn);
gbc.gridx = 2;
gbl.setConstraints(lbl_head_name, gbc);
result_container.add(lbl_head_name);
gbc.gridx = 3;
gbl.setConstraints(lbl_head_availability, gbc);
result_container.add(lbl_head_availability);
//display result row by row in gridbaglayout
for(int i = 0; i < count; ++i)
{
lbl_num[i] = new JLabel(i+1 + ". ");
lbl_isbn[i] = new JLabel(al_isbn.get(i));
lbl_book_name[i] = new JLabel(al_book_name.get(i));
lbl_availability[i] = new JLabel(al_availability.get(i).equals("TRUE") ? "Yes":"No");
btn_detail[i] = new JButton("Detail");
btn_detail[i].addActionListener(this);
btn_detail[i].setName(al_isbn.get(i));
gbc.gridx = 0;
gbc.gridy = i+2;
gbc.anchor = GridBagConstraints.NORTHEAST;
gbl.setConstraints(lbl_num[i], gbc);
result_container.add(lbl_num[i]);
gbc.gridx = 1;
gbc.anchor = GridBagConstraints.NORTHWEST;
gbl.setConstraints(lbl_isbn[i], gbc);
result_container.add(lbl_isbn[i]);
gbc.gridx = 2;
gbl.setConstraints(lbl_book_name[i], gbc);
result_container.add(lbl_book_name[i]);
gbc.gridx = 3;
gbc.anchor = GridBagConstraints.CENTER;
gbl.setConstraints(lbl_availability[i], gbc);
result_container.add(lbl_availability[i]);
gbc.gridx = 4;
gbl.setConstraints(btn_detail[i], gbc);
result_container.add(btn_detail[i]);
if(action.equals("D")) //the action is delete and it is performed by admin
{
//declare delete button
JButton[] btn_delete = new JButton[count];
btn_delete[i] = new JButton("Delete");
btn_delete[i].addActionListener(this);
btn_delete[i].setName(al_isbn.get(i));
//add delete button
gbc.gridx = 5;
gbl.setConstraints(btn_delete[i], gbc);
result_container.add(btn_delete[i]);
}
else if(action.equals("E"))
{
//declare edit button
JButton[] btn_edit = new JButton[count];
btn_edit[i] = new JButton("Edit");
btn_edit[i].addActionListener(this);
btn_edit[i].setName(al_isbn.get(i));
//add edit button
gbc.gridx = 5;
gbl.setConstraints(btn_edit[i], gbc);
result_container.add(btn_edit[i]);
}
}
}
else
{
result_container.add(new JLabel("No result found."));
}
}
this.revalidate();
this.repaint();
}
And this is how the interface looks:
I scroll the scroll bar to the end already, but it always cannot fully display the last row no matter how many record I have.
This is the size of my panels:
this(the main JFrame): this.setPreferredSize(new Dimension(750, 250));
JScrollPane jsp_result: jsp_result.setPreferredSize(new Dimension(700, 200));
JPanel result_container: result_container.setPreferredSize(new Dimension(700, 200));
As you can see in my code, there are two scroll panes at the bottom. I need my gui to show both of these scroll panes on the right side, the smaller one(displaying the current amount of money the player has, this one I need to stay one line thick) and the second one, which will be constantly spitting out information of the player's rolls on the bottom.
Also how do I make it so that my combo box listener will give every item a 10 to its output to start out with then when it is being sent out it gives each 1 more so that they have their unique number starting at 11 then 12, 13, and so on.
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class dicebot extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JTextField textField;
private JComboBox combo;
private JButton btnConfirm;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
dicebot frame = new dicebot();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public dicebot() {
setTitle("Dice Bot");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.WEST);
GridBagLayout gbl_panel = new GridBagLayout();
gbl_panel.columnWidths = new int[]{0, 0};
gbl_panel.rowHeights = new int[]{0, 0};
gbl_panel.columnWeights = new double[]{0.0, 1.0};
gbl_panel.rowWeights = new double[]{0.0, Double.MIN_VALUE};
panel.setLayout(gbl_panel);
//Every new Label however needs every part that says "user" or on the Password: "pass" changed to something unique.
JLabel userTag = new JLabel("Username:");
GridBagConstraints gbc_userTag = new GridBagConstraints();
gbc_userTag.insets = new Insets(0, 0, 0, 5);
gbc_userTag.anchor = GridBagConstraints.EAST;
gbc_userTag.gridx = 0;//Here are your x + y coords
gbc_userTag.gridy = 0;//Adding to x moves left, adding to y moves down
panel.add(userTag, gbc_userTag);
//Every new textfield needs only the * part to change for it to be valid. (gbc_* =)
textField = new JTextField();
GridBagConstraints gbc_textField = new GridBagConstraints();
gbc_textField.fill = GridBagConstraints.HORIZONTAL;
gbc_textField.gridx = 1;
gbc_textField.gridy = 0;
panel.add(textField, gbc_textField);
textField.setColumns(10);
JLabel startTag = new JLabel("Starting Bid:");
GridBagConstraints gbc_startTag = new GridBagConstraints();
gbc_startTag.insets = new Insets(0, 0, 0, 5);
gbc_startTag.anchor = GridBagConstraints.EAST;
gbc_startTag.gridx = 0;
gbc_startTag.gridy = 2;
panel.add(startTag, gbc_startTag);
textField = new JTextField();
GridBagConstraints gbc_textFieldStartBid = new GridBagConstraints();
gbc_textField.fill = GridBagConstraints.HORIZONTAL;
gbc_textField.gridx = 1;
gbc_textField.gridy = 2;
panel.add(textField, gbc_textField);
textField.setColumns(10);
JLabel multTag = new JLabel("Multiplier:");
GridBagConstraints gbc_multTag = new GridBagConstraints();
gbc_multTag.insets = new Insets(0, 0, 0, 5);
gbc_multTag.anchor = GridBagConstraints.EAST;
gbc_multTag.gridx = 0;
gbc_multTag.gridy = 3;
panel.add(multTag, gbc_multTag);
textField = new JTextField();
GridBagConstraints gbc_textFieldMultiplier = new GridBagConstraints();
gbc_textField.fill = GridBagConstraints.HORIZONTAL;
gbc_textField.gridx = 1;
gbc_textField.gridy = 3;
panel.add(textField, gbc_textField);
textField.setColumns(10);
JLabel minTag = new JLabel("Min Remaining:");
GridBagConstraints gbc_minTag = new GridBagConstraints();
gbc_minTag.insets = new Insets(0, 0, 0, 5);
gbc_minTag.anchor = GridBagConstraints.EAST;
gbc_minTag.gridx = 0;
gbc_minTag.gridy = 4;
panel.add(minTag, gbc_minTag);
textField = new JTextField();
GridBagConstraints gbc_textFieldMinRemaining = new GridBagConstraints();
gbc_textField.fill = GridBagConstraints.HORIZONTAL;
gbc_textField.gridx = 1;
gbc_textField.gridy = 4;
panel.add(textField, gbc_textField);
textField.setColumns(10);
textField = new JTextField();
GridBagConstraints gbc_textFieldPassword = new GridBagConstraints();
gbc_textField.fill = GridBagConstraints.HORIZONTAL;
gbc_textField.gridx = 1;
gbc_textField.gridy = 1;
panel.add(textField, gbc_textField);
textField.setColumns(10);
JLabel passTag = new JLabel("Password:");
GridBagConstraints gbc_passTag = new GridBagConstraints();
gbc_passTag.insets = new Insets(0, 0, 0, 5);
gbc_passTag.anchor = GridBagConstraints.EAST;
gbc_passTag.gridx = 0;
gbc_passTag.gridy = 1;
panel.add(passTag, gbc_passTag);
textField = new JTextField();
GridBagConstraints gbc_textFieldOdds = new GridBagConstraints();
gbc_textField.fill = GridBagConstraints.HORIZONTAL;
gbc_textField.gridx = 1;
gbc_textField.gridy = 5;
panel.add(textField, gbc_textField);
textField.setColumns(10);
JLabel oddsTag = new JLabel("Odds %:");
GridBagConstraints gbc_oddsTag = new GridBagConstraints();
gbc_oddsTag.insets = new Insets(0, 0, 0, 5);
gbc_oddsTag.anchor = GridBagConstraints.EAST;
gbc_oddsTag.gridx = 0;
gbc_oddsTag.gridy = 5;
panel.add(oddsTag, gbc_oddsTag);
textField = new JTextField();
GridBagConstraints gbc_textFieldMaxBet = new GridBagConstraints();
gbc_textField.fill = GridBagConstraints.HORIZONTAL;
gbc_textField.gridx = 1;
gbc_textField.gridy = 6;
panel.add(textField, gbc_textField);
textField.setColumns(10);
//This is the Combo Box
combo = new JComboBox<String>(new String[]{"BTC","LTC","PPC","NMC","XPM","FTC","ANC","DOGE","NXT"});
combo.addActionListener(this);
GridBagConstraints gbc_list = new GridBagConstraints();
gbc_list.fill = GridBagConstraints.HORIZONTAL;
gbc_list.gridx = 1;
gbc_list.gridy = 7;
panel.add(combo, gbc_list);
JLabel maxTag = new JLabel("MaxBet:");
GridBagConstraints gbc_maxTag = new GridBagConstraints();
gbc_maxTag.insets = new Insets(0, 0, 0, 5);
gbc_maxTag.anchor = GridBagConstraints.EAST;
gbc_maxTag.gridx = 0;
gbc_maxTag.gridy = 6;
panel.add(maxTag, gbc_maxTag);
JPanel panel_1 = new JPanel();
contentPane.add(panel_1, BorderLayout.SOUTH);
panel_1.setLayout(new FlowLayout(FlowLayout.RIGHT, 5, 5));
btnConfirm = new JButton("Turn Up");
btnConfirm.addActionListener(this);
panel_1.add(btnConfirm);
JScrollPane scrollPane = new JScrollPane();
contentPane.add(scrollPane, BorderLayout.CENTER);
JTextArea textArea = new JTextArea("Current Balance");
textArea.setColumns(1);
scrollPane.setViewportView(textArea);
JScrollPane scrollPanel = new JScrollPane();//This will hold the information the bot sends over such as win/loose or error
contentPane.add(scrollPane, BorderLayout.CENTER);
JTextArea textAreal = new JTextArea("Input bot information here...");
textArea.setColumns(20);
scrollPane.setViewportView(textArea);
pack();
}
#Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == combo) {
System.out.println(combo.getSelectedIndex()+1);
}else if (e.getSource() == btnConfirm){
Dicebotcode dbc = new Dicebotcode();
dbc.dbc();
}
}
}
Two things...
One, if you've added the same scroll pane twice...
JScrollPane scrollPane = new JScrollPane();
contentPane.add(scrollPane, BorderLayout.CENTER);
JScrollPane scrollPanel = new JScrollPane();//This will hold the information the bot sends over such as win/loose or error
contentPane.add(scrollPane, BorderLayout.CENTER);
^--- Note no "l"
And, even if you have added the two scroll pane instances, you've added them to the same place, BorderLayout.CENTER
BorderLayout only allows a single component to be added to one of the available positions it supports, so, in this case, only the second scroll pane would be visible
I am trying to create a small GUI with some lables and txtAreas. I did it by using absolute positioning, but I want to go on gridbag layout. I am trying from last 3 days, but couldnt get these lables as required position. either stucking in the middle around, or they stucking near the border. Please help to get them in these positions.
public void initUIPanel()
{
jf = new JFrame();
jf.setTitle("Mortgage Calculator");
jf.setLocation(100,200);
jf.setSize(400,500);
jf.setVisible (true);
//jf.setResizable(false);
JPanel panel = new JPanel();
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.NORTHWEST;
loanAmount = new JTextField(15);
gbc.gridx = 0;
gbc.gridy = 0;
gbl.setConstraints(loanAmount, gbc);
panel.add(loanAmount);
loanTerm = new JTextField(15);
gbc.gridx = 0;
gbc.gridy = 0;
gbl.setConstraints(loanTerm, gbc);
panel.add(loanTerm);
amount = new JLabel("Loan Amount");
gbc.gridx = 0;
gbc.gridy = 0;
gbl.setConstraints(amount, gbc);
panel.add(amount);
term= new JLabel("Loan Term");
gbc.gridx = 0;
gbc.gridy = 0;
gbl.setConstraints(term, gbc);
panel.add(term);
currency = new JLabel ("AUD");
gbc.gridx = 0;
gbc.gridy = 0;
gbl.setConstraints(currency, gbc);
panel.add(currency);
numOfYear = new JLabel ("Year");
gbc.gridx = 0;
gbc.gridy = 0;
gbl.setConstraints(numOfYear, gbc);
panel.add(numOfYear);
JPanel middlePanel = new JPanel ();
middlePanel.setBorder ( new TitledBorder ( new EtchedBorder (), "Display Area" ) );
txtResult = new JTextArea();
gbc.gridx = 0;
gbc.gridy = 0;
gbl.setConstraints(txtResult, gbc);
panel.add(txtResult);
jf.add(panel,"Center");
//panel.setBounds(200,200,200,20);
jf.setVisible(true);
}
It is giving everything in 2 lines. all messed.
What I want is
First Line: Loan Amount: ............(txt Area).... "AUD"
Second LIne: Loan Term: .............(Txt Area......Years
Then Txtbox
Thank you
You haven't set the layout of the panel:
panel.setLayout(gbl);
And, as already said in the comments, all the components have the same gridx and gridy, which is obviously not right.
Here's a complete example which, if I understand correctly, does what you want:
import javax.swing.*;
import java.awt.*;
public class GblTest extends JFrame {
public GblTest() {
add(createPanel(), BorderLayout.NORTH);
}
private JPanel createPanel() {
JPanel p = new JPanel();
p.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.anchor = GridBagConstraints.BASELINE_LEADING;
p.add(new JLabel("Loan amount"), c);
c.gridx++;
p.add(new JTextField(15), c);
c.gridx++;
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
p.add(new JLabel("AUD"), c);
c.gridx = 0;
c.gridy++;
c.fill = GridBagConstraints.NONE;
c.weightx = 0.0;
p.add(new JLabel("Loan term"), c);
c.gridx++;
p.add(new JTextField(15), c);
c.gridx++;
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
p.add(new JLabel("Years"), c);
return p;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
#Override
public void run() {
GblTest test = new GblTest();
test.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
test.pack();
test.setVisible(true);
}
});
}
}