I developed a GUI based application using Java. I used GridBagLayout
to build UI. And when I run the jar
file on my system the UI is looking perfect as I need. (Please see the below image)
But when I run the same jar file on other machines the UI is like below,
Jtextfield
became like [] this and not allowing the user to enter the input.Below is the code what I have used in my test pane.
public TestPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
try {
URL url = getClass().getResource("alarm5.jpg");
image = ImageIO.read(url);
} catch (IOException ex) {
System.out.println("Error: "+ex);
}
Font myFont = new Font("Calibri", Font.PLAIN | Font.BOLD, 16);
Font myFont2 = new Font("Calibri", Font.PLAIN | Font.BOLD, 14);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
selectall = new JCheckBox("Select all");
selectall.setForeground(Color.WHITE);
selectall.setOpaque(false);
selectall.setFont(myFont);
selectall.addActionListener(this);
add(selectall, gbc);
gbc.gridx = 0;
gbc.gridy = 1;
gbc.anchor = GridBagConstraints.WEST;
monday = new JCheckBox("Monday");
monday.setForeground(Color.WHITE);
monday.setOpaque(false);
monday.setFont(myFont2);
monday.addActionListener(this);
add(monday, gbc);
gbc.gridx = 0;
gbc.gridy = 2;
tuesday = new JCheckBox("Tuesday");
tuesday.setForeground(Color.WHITE);
tuesday.setOpaque(false);
tuesday.addActionListener(this);
tuesday.setFont(myFont2);
add(tuesday, gbc);
gbc.gridx = 0;
gbc.gridy = 3;
gbc.anchor = GridBagConstraints.WEST;
wednesday = new JCheckBox("Wednesday");
wednesday.setForeground(Color.WHITE);
wednesday.setOpaque(false);
wednesday.addActionListener(this);
wednesday.setFont(myFont2);
add(wednesday, gbc);
gbc.gridx = 0;
gbc.gridy = 4;
gbc.anchor = GridBagConstraints.WEST;
thursday = new JCheckBox("Thursday");
thursday.setForeground(Color.WHITE);
thursday.setOpaque(false);
thursday.addActionListener(this);
thursday.setFont(myFont2);
add(thursday, gbc);
gbc.gridx = 0;
gbc.gridy = 5;
friday = new JCheckBox("Friday");
friday.setForeground(Color.WHITE);
friday.setOpaque(false);
friday.addActionListener(this);
friday.setFont(myFont2);
add(friday, gbc);
gbc.gridx = 1;
gbc.gridy = 1;
gbc.anchor = GridBagConstraints.WEST;
saturday = new JCheckBox("Saturday");
saturday.setForeground(Color.WHITE);
saturday.setOpaque(false);
saturday.addActionListener(this);
saturday.setFont(myFont2);
add(saturday, gbc);
gbc.gridx = 1;
gbc.gridy = 2;
gbc.anchor = GridBagConstraints.WEST;
sunday = new JCheckBox("Sunday");
sunday.setForeground(Color.WHITE);
sunday.setOpaque(false);
sunday.addActionListener(this);
sunday.setFont(myFont2);
add(sunday, gbc);
gbc.gridx = 0;
gbc.gridy = 7;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridwidth = 2;
gbc.insets = new Insets(10, 0, 0, 0);
JLabel env = new JLabel("At what time, should i remind you? ");
env.setForeground(Color.WHITE);
env.setFont(myFont);
add(env, gbc);
gbc.gridx = 3;
gbc.gridy = 7;
gbc.insets = new Insets(10, 0, 10, 0);
gbc.fill = GridBagConstraints.HORIZONTAL;
final JTextField tm = new JTextField(5);
tm.setText("21:00:00");
tm.setToolTipText("Input should be in HH:MM:SS format and time format should be 24 hours.");
add(tm, gbc);
gbc.gridx = 1;
gbc.gridy = 8;
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 2;
Set = new JButton(" Set ");
Set.setFocusable(false);
add(Set, gbc);
}
Below is the code what I have used for frame.
frame2 = new JFrame("Select days and time");
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.setLayout(new BorderLayout());
frame2.add(new TestPane());
frame2.pack();
frame2.setResizable(false);
frame2.setLocationRelativeTo(null);
frame2.setVisible(true);
frame2.setAlwaysOnTop(true);
Both systems have the same resolution settings. Can you please help me here? how can I make this look same on any system? And how can I fix the JTextfield
issue?
Alarm image:
The code you posted is not a minimal, reproducible example. I assume you are setting the image as the background for your TestPane
class but the code that does that is missing. The Alarm image you posted is HUGE. I scaled it down to 30% of its original size. After that you just need to call setPreferredSize()
in the constructor of class TestPane
. For me, a width of 450 and a height of 260 worked well, i.e.
public TestPane() {
setPreferredSize(new Dimension(450, 260);
// Rest of your code unchanged.
}
This is how it looks on my computer.