Reputation: 1
I wrote this code, but I'm having a problem with making it align from right to left. I tried several things, but none of them works. I know it can be done by playing with the coordinates, but I want a way that I wouldn't need to do that for every word. How am I supposed to do it the right way?
code:
import java.util.*;
import javax.swing.*;
import java.awt.*;
public class GUI {
//messages
public static final String ConnectC_MSG = "התחבר" ;
public static final String DisconnectC_MSG = "התנתק" ;
public static final String ServerLBL_MSG = "שרת יעד:" ;
public static final String UsernameLBL_MSG = ":שם משתמש";
public static final String PasswordLBL_MSG = ":סיסמא" ;
public static final String PortLBL_MSG = ":פתחה" ;
//sizes
public static final int SreverTxtfield_Width = 10;
public static final int UsernameTxtfield_width = 10;
public static final int PasswordTxtfield_width = 10;
public static final int PortTxtfield_width = 5 ;
public static final int WINDOW_WIDTH = 800;
public static final int WINDOW_HEIGHT = 200;
static JFrame frame1;
static Container pane;
static JButton btnConnect = new JButton(ConnectC_MSG),
btiDiscinnect = new JButton(DisconnectC_MSG);
static JLabel lblServer = new JLabel(ServerLBL_MSG),
lblUsername = new JLabel(UsernameLBL_MSG),
lblPassword = new JLabel(PasswordLBL_MSG),
lblPort = new JLabel(PortLBL_MSG);
static JTextField txtServer = new JTextField(SreverTxtfield_Width),
txtUsername = new JTextField(UsernameTxtfield_width),
txtPort = new JTextField(PortTxtfield_width);
static JPasswordField txtPassword = new JPasswordField(PasswordTxtfield_width);
static Insets insets;
public static void main(String[] args) {
frame1 = new JFrame ("הדגמה");
frame1.setSize(WINDOW_WIDTH,WINDOW_HEIGHT);
frame1.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
pane = frame1.getContentPane();
pane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
insets = pane.getInsets();
pane.setLayout(null);
pane.add(lblServer);
pane.add(lblUsername);
pane.add(lblPassword);
pane.add(lblPort);
pane.add(txtServer);
pane.add(txtUsername);
pane.add(txtPassword);
pane.add(txtPort);
lblServer.setBounds((int)(insets.right),insets.top,
lblServer.getPreferredSize().width, lblServer.getPreferredSize().height);
txtServer.setBounds(lblServer.getX()+lblServer.getWidth(), lblServer.getY()+lblServer.getHeight(),
txtServer.getPreferredSize().width, txtServer.getPreferredSize().height);
frame1.setVisible(true);
}
}
Upvotes: 0
Views: 2465
Reputation: 46871
Try
pane = new JPanel();
in place of
pane = frame1.getContentPane();
and remove this line
pane.setLayout(null);
and finally add pane
to JFrame
frame1.getContentPane().add(pane);
Upvotes: 0
Reputation: 324197
Try something like:
JPanel panel = new JPanel( new FlowLayout(FlowLayout.RIGHT) );
panel.add(...);
panel.add(...);
...
frame.add(panel, BorderLayout.NORTH);
and the components will align to the ride side of the frame.
Also, get rid of all the static variables. That is NOT the way to write a class.
Read the section from the Swing tutorial on How to Use Flow Layout for more information and examples. If will show you a better way to structure your class without all the static stuff.
Upvotes: 2