"tab" key event as "enter" key event - java

I have a JTextField which takes a number. I need to use "tab" key event same like "enter" key event.
JLabel lblPieChart = new JLabel("Maximum pie chart label length:");
GridBagConstraints gbc = new GridBagConstraints();
basePanel.add(lblPieChart, gbc);
// PieChart Label textbox
SwiftApplication APP = SwiftApplication.getInstance();
int nMaxLabel = APP.getMaxPieLabel();
mMaxLabelLength = new JTextField();
mMaxLabelLength.setPreferredSize(new Dimension(200, 24));
mMaxLabelLength.setText(new Integer(nMaxLabel).toString());
GridBagConstraints gbc2 = new GridBagConstraints();
basePanel.add(mMaxLabelLength, gbc2);
mMaxLabelLength.addActionListener(this);
In above code, as soon as I press enter after entering a number, the ActionListener comes into play and does the calculation using the number. I need to do the same thing, if I press "tab". Currently, if I press tab, it goes to next text field without any change.

Related

How do I scale JXMonthView?

Hi everyone reading this.
I am currently developing a program, that should run well displayed in different resolutions and thus has a scaling factor.
There is ne component, that I cannot find a solution for scaling for:
The JXDatePicker and its JXMonthView.
What I tried:
final JXDatePicker datePicker = new JXDatePicker(new Date());
final JXMonthView monthView = datePicker.getMonthView();
monthView.setBounds(hauptFrame.getSize().width / 2 - (100*ViewerDefaults.SZ_INCR), (165*ViewerDefaults.SZ_INCR), (200*ViewerDefaults.SZ_INCR), (200*ViewerDefaults.SZ_INCR));
monthView.setSize(monthView.getWidth() * ViewerDefaults.SZ_INCR, monthView.getHeight() * ViewerDefaults.SZ_INCR);
monthView.setPreferredColumnCount(1);
monthView.setPreferredRowCount(1);
monthView.setTraversable(true);
monthView.setZoomable(true);
datePicker.setSize(datePicker.getWidth() * 2, datePicker.getHeight() * 2);
ViewerDefaults.SZ_INCR is the scaling factor and would replace the 2 in the last line, if working.
I added the setPreferredColumnCount(1) and setPreferredRowCount(1) as I tried setting the size of the JXMonthview before, but I ended up having 4 months displayed next to each other, whereas I just wanted a single, larger displayed month.
Can you help and show me a way to enlarge the display of only on month?
EDIT:
I translated everything into using Layout Managers. The problematic behaviour remains: The month displayed is not scaled up, but simply displayed in the center. To give some more insight to the code I put the whole method here as follows(size is set earlier by Toolkit.getDefaultToolkit().getScreenSize();):
private static JPanel licBorrowPanel = null;
licBorrowPanel = new JPanel();
licBorrowPanel.setBounds(0, 20, size.width, size.height-20);
licBorrowPanel.setVisible(false);
licBorrowPanel.setBackground(Color.WHITE);
public static void licenceBorrowDialog() {
licBorrowPanel.setSize(new Dimension(hauptFrame.getSize().width, hauptFrame.getSize().height));
licBorrowPanel.setBackground(Color.WHITE);
licBorrowPanel.setLayout(new BorderLayout());
licBorrowPanel.setVisible(true);
//Create upper part of licBorrowPanel
JPanel licBorrowTop = new JPanel();
licBorrowTop.setLayout(new BoxLayout(licBorrowTop, BoxLayout.Y_AXIS));
// Label Titel
JLabel labelTitel = new JLabel("License borrwing");
labelTitel.setHorizontalAlignment(JLabel.CENTER);
labelTitel.setFont(ViewerDefaults.DEF_LABEL_FONT);
licBorrowTop.add(labelTitel);
// Header Calendar
JLabel calendarTitle = new JLabel("Please select a date", SwingConstants.LEFT);
calendarTitle.setHorizontalAlignment(JLabel.CENTER);
calendarTitle.setFont(ViewerDefaults.DEF_ROW_FONT);
licBorrowTop.add(calendarTitle);
licBorrowPanel.add(licBorrowTop, BorderLayout.PAGE_START);
//Create central part of licBorrowPanel
JPanel licBorrowCenter = new JPanel();
licBorrowCenter.setLayout(new BoxLayout(licBorrowCenter, BoxLayout.Y_AXIS));
// Label selectedDate
final JLabel labelSelectedDate = new JLabel("<HTML><BODY> </HTML></BODY>");
labelSelectedDate.setHorizontalAlignment(JLabel.CENTER);
labelSelectedDate.setFont(ViewerDefaults.DEF_LIC_FONT);
labelSelectedDate.setText("<HTML><BODY><b>Some Text</HTML></BODY>");
// Calendar
final JXDatePicker datePicker = new JXDatePicker(new Date());
final JXMonthView monthView = datePicker.getMonthView();
monthView.setPreferredColumnCount(1);
monthView.setPreferredRowCount(1);
monthView.setZoomable(true); //Removing this results in several Columns and Rows being displayed.
// Set selection to "in two days" as default
Date newDate = monthView.getSelectionDate();
newDate.setDate(newDate.getDate()+2);
datePicker.addActionListener(new ActionListener() {
//...
});
licBorrowCenter.add(monthView, BorderLayout.CENTER);
licBorrowCenter.add(labelSelectedDate, BorderLayout.CENTER);
// Footer Calendar
JLabel calendarSubTitle = new JLabel("<HTML><BODY><CENTER>Some other Text.</CENTER></HTML></BODY>", SwingConstants.LEFT);
calendarSubTitle.setFont(ViewerDefaults.DEF_FONT);
calendarSubTitle.setHorizontalAlignment(JLabel.CENTER);
calendarSubTitle.setFont(ViewerDefaults.DEF_ROW_FONT);
calendarSubTitle.setForeground(Color.RED);
licBorrowCenter.add(calendarSubTitle, BorderLayout.CENTER);
licBorrowPanel.add(licBorrowCenter);
//Create lower part of licBorrowPanel
JPanel licBorrowBottom = new JPanel();
licBorrowBottom.setLayout(new BorderLayout());
// Button OK
JButton buttonLicBorrowOK = new JButton("OK");
buttonLicBorrowOK.setFont(ViewerDefaults.DEF_LIC_FONT);
licBorrowBottom.add(buttonLicBorrowOK, BorderLayout.LINE_START);
// Button Return
JButton buttonLicReturn = new JButton("Return");
buttonLicReturn.setFont(ViewerDefaults.DEF_LIC_FONT);
licBorrowBottom.add(buttonLicReturn, BorderLayout.CENTER);
// Button Cancel
JButton buttonLicBorrowCancel = new JButton("Cancel");
buttonLicBorrowCancel.setFont(ViewerDefaults.DEF_LIC_FONT);
licBorrowBottom.add(buttonLicBorrowCancel, BorderLayout.LINE_END);
licBorrowPanel.add(licBorrowBottom, BorderLayout.PAGE_END);
// Update licBorrowPanel
licBorrowPanel.update(licBorrowPanel.getGraphics());
// several action listeners for buttons eluded..
}
"hauptframe" is the parent JFrame.
An additional problem occurred, but I think this will be solved once the JXMonthView is displayed as wanted: The licBorrowBottom is not displayed.
I hope this clarifies the problem and helps helping :)

Java BoxLayout use full width

I am creating a messaging program that has multiple chats. On the side of the chat window there is a JPanel containing a List Array of all the buttons to switch chats.I am having trouble getting all the buttons in the side panel to be the same width, no matter what they contain. But whatever I try doesn't seem to work and I am looking for some help. Please can you explain what the code does and how it can be used so I can learn it for next time. Sorry if the comments aren't the best it's a work in progress as I wait till code works before adding detailed comments otherwise I am constantly changing them. :(
This is what it looks like without any chats:
This is with multiple chats and you can see the width variation
Here is the code that is run when a new user is added:
public void newUser() {
JPanel dialogue = new JPanel();
dialogue.setLayout(new BoxLayout(dialogue, BoxLayout.Y_AXIS));
//Creating/adding dialogue components
JLabel Enter_ip = new JLabel("Enter the ip address");
JTextField Get_ip = new JTextField("");
dialogue.add(Enter_ip);
dialogue.add(Get_ip);
dialogue.add(Box.createHorizontalStrut(15));
JLabel Enter_name = new JLabel("Enter the user's name");
JTextField Get_name = new JTextField("");
dialogue.add(Enter_name);
dialogue.add(Get_name);
//Creating the dialogue box
JOptionPane.showConfirmDialog(null, dialogue, "New User", JOptionPane.OK_CANCEL_OPTION);
//Getting data from dialogue box
String ip = Get_ip.getText();
String name = Get_name.getText();
//Try connecting to other user here
//Adding user message data
int size = Users_Messages_Data.size();
Users_Messages_Data.add(new ArrayList());//New user
Users_Messages_Data.get(size).add(new ArrayList());//Messages
Users_Messages_Data.get(size).add(new ArrayList());//Details
Users_Messages_Data.get(size).get(1).add(name);
Users_Messages_Data.get(size).get(1).add(ip);
Users_Messages_Data.get(size).get(1).add("port number");
//adds new UserButton
int temp = users.size();
users.add(new JButton(Users_Messages_Data.get(size).get(1).get(0)));
users.get(temp).addActionListener(this);
users.get(temp).setSize(new Dimension(500, 500));
SelectUser.add(users.get(temp), gbc);
Messaging.revalidate();
pack();
}
and here is the initialisation method:
public void MessagingGUI() {
//Creates JFrame and pane
Messaging = new JFrame();
Container pane = getContentPane();
JLabel info = new JLabel("29/07/2016 15:36");
//Creates user chats panel
SelectUser = new JPanel(new GridBagLayout());
gbc = new GridBagConstraints();
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridwidth = GridBagConstraints.REMAINDER;
SelectUser.setLayout(new BoxLayout(SelectUser, BoxLayout.Y_AXIS));
SelectUser.setSize(new Dimension(500, 500));
//Adds different chats
users = new ArrayList<JButton>();
int x;
for (x = 0; x < Users_Messages_Data.size(); x++) {
users.add(new JButton(Users_Messages_Data.get(x).get(1).get(0)));
users.get(x).addActionListener(this);
SelectUser.add(users.get(x), gbc);
}
JButton newUser = new JButton("+");
newUser.addActionListener(this);
SelectUser.add(newUser);
JScrollPane UserScroll = new JScrollPane(SelectUser,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//Creates messages feed
JPanel Messages = new JPanel();
Messages.setLayout(new BoxLayout(Messages, BoxLayout.Y_AXIS));
AllMessages = new JTextArea(10, 30);
AllMessages.setBackground(Color.WHITE);
AllMessages.setEditable(false);
AllMessages.setBorder(BorderFactory.createLineBorder(Color.BLUE, 1));
JScrollPane MessageScroll = new JScrollPane(AllMessages,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//Creates user text entry box
UserText = new JTextArea(5, 30);
//UserText.setLineWrap(true);
//UserText.setWrapStyleWord(true);
UserText.setBorder(BorderFactory.createLineBorder(Color.CYAN, 1));
UserText.setText("Enter Message. Press enter to send");
UserText.setFocusable(true);
UserText.addKeyListener(this);
UserText.setPreferredSize(new Dimension(5, 20));
//Adds all components to pane
Messages.add(info);
Messages.add(MessageScroll);
Messages.add(UserText);
pane.add(UserScroll, BorderLayout.WEST);
pane.add(Messages, BorderLayout.CENTER);
//JFrame setup
Messaging.setTitle("Messaging");
Messaging.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Messaging.setContentPane(pane);
Messaging.setVisible(true);
Messaging.setSize(400, 350);
Load_User(current_user);
}
First of all, variable names should NOT start with an upper case character. Some of your variable names are correct, other are not. Be consistent and follow Java conventions!!!
.I am having trouble getting all the buttons in the side panel to be the same width,
Don't use a BoxLayout. It does not automatically resize on the opposite axis of the layout.
Instead you can use:
a GridLayout to make all the buttons the same size. The GridLayout will also fill the area vertically which is not what you want so you will need to nest panels. So create a parent panel using a BorderLayout. Add your panel using the GridLayout with the buttons to the BorderLayout.PAGE_START of this parent panel. Then add the BorderLayout panel to the scroll pane.
a GridBagLayout. You will need to use the "fill" contstraint to have the component fill the width of the cell.
Read the Swing tutorial on Layout Managers for more information and examples.
Or maybe a different approach is to use a JList to display the users.

How to set left alignement JLabel in JPanel

I have a JPanel that I insert into my JFrame.
Now, I want to display a JLabel on the left at my JPanel. So I have this code:
JPanel panelHeader = new JPanel();
panelHeader.setBackground(new Color(52,151,236));
panelHeader.setPreferredSize(new Dimension(300,25));
GridBagConstraints GBC = new GridBagConstraints();
Container CR = new Container();
GridBagLayout GBL = new GridBagLayout();
CR.setLayout(GBL);
panelHeader.add(CR);
LabelFormat label = new LabelFormat("EasyManagement",new Font("Arial Narrow", Font.PLAIN, 16),Color.white);
GBC = new GridBagConstraints();
CR.add(label);
GBC.gridx=0;
GBC.gridy=0;
GBC.insets.left = 1;
GBC.insets.top=0;
GBC.fill = GridBagConstraints.BOTH;
GBC.anchor= GridBagConstraints.EAST;
GBL.setConstraints(label,GBC);
With this code, I'm not able to display the JLabel at the left on JPanel but I see it on the center.
How can I fixed it?
-You might wish to set the JLabel's horizontalAlignment property. One way is via its constructor. Try:
JLabel label = new JLabel(lText, SwingConstants.LEFT);
This can also be done via the expected setter method:
label.setHorizontalAlignment(SwingConstants.LEFT);
-You can also try using LEFT alignment for your JLabel JPanel container
myJPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
-Final way :
You could wrap the label in JPanel with FlowLayout.LEADING
JPanel wrapper = new JPanel(new FlowLayout(FlowLayout.LEADING,0, 0));
wrapper.add(Jlabel);
panel.add(wrapper);
Also remember to follow Java naming convention. variables begin with lower case letters using camel casing: Jlabel → jLabel

How can I set the size of JTextField?

I was trying to set size of JButton or JTextField or JPanel but somehow I didn't manage to do that.
I tried
JTextField FirstName = new JTextField("First Name");
FirstName.setSize(new Dimension(40, 20));
and
JTextField FirstName = new JTextField("Fisrt Name");
FirstName.setSize(40, 20);
but none of them worked. How can I achieve the desired effect?

Adding a label for a JTextField

I have a JTextField and I want to add a label next to it, so that it looks like this...
+---------------+
TEAM 1: |Text field here|
+---------------+
This is the code where I am constructing the JTextFields...
jb = new JButton(">> FIGHT <<");
jt0 = new JTextField("", 25);
jt1 = new JTextField("", 25);
jt2 = new JTextField("<< BATTLE VICTOR >>", 35);
Could someone please tell me how to add the label.
Just put a JLabel next to your JTextField.
In addition to layout selection, don't forget that "you can improve your program's accessibility by using the setLabelFor() method," as discussed in How to Use Labels.
If you want to add any text to your interface, you should use JLabel. By placing a JLabel next to a JTextField, you can achieve the look you are asking for.
A JLabel is simply constructed like this...
JLabel myLabel = new JLabel("This is my message");
The way you add the JLabel to your interface depends on your JPanel/JFrame layout, but I tend to prefer BorderLayout, which you would use like this...
JLabel myLabel = new JLabel("Team 1");
JTextField myTextField = new JTextField("Team Awesome!");
JPanel panel = new JPanel(new BorderLayout());
panel.add(myLabel,BorderLayout.WEST);
panel.add(myTextField,BorderLayout.CENTER);
This will put a JLabel to the left (WEST) of the JTextField.
Refer to the following documentation for more information:
JLabel: http://docs.oracle.com/javase/6/docs/api/javax/swing/JLabel.html
BorderLayout: http://docs.oracle.com/javase/6/docs/api/java/awt/BorderLayout.html
You want to use a combination of a layout manager and JLabels
JLabel label = new JLabel("User name:");
JTextField field = new JTextField(12);
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
add(label, gbc);
gbc.grid++;
add(field, gbc);
Check out How to Use Labels for more examples

Categories