如何在指定的布局中定位 JLabel?
How to Position a JLabel in the specified Layout?
我正在尝试在屏幕上定位我的标签和按钮。我在这里找到了使用 label3.setHorizontalAlignment(SwingConstants.CENTER); label3.setVerticalAlignment(SwingConstants.CENTER);
设置标签位置的答案,但我的代码没有效果。
此外,在将我的布局从流布局更改为边框布局时,屏幕上只出现一个 Jbutton [CLEAR]。谁能帮我纠正这个问题?
public class Corrected1 extends JFrame {
public JTextField tf1;
public JTextField tf2;
public JLabel label1;
public JLabel label2;
public JLabel label3;
public JLabel label4;
public JButton button1;
public JButton button2;
public JComboBox cb,cb1;
public String[] list={"DOLLARS","EUROS ","YEN","POUNDS","RUPEES"};
public void init() {try {
SwingUtilities.invokeAndWait(new Runnable(){
public void run(){
Corrected();
}
});
} catch (InvocationTargetException exc) {
System.out.println("Error occured due to "+ exc);
exc.printStackTrace();
} catch (InterruptedException exc1) {
System.out.println("Error occured due to "+ exc1);
exc1.printStackTrace();
}
}
public void Corrected(){
setLayout(new GridBagLayout());
JLabel label1 = new JLabel("FROM :");
label1.setFont(new Font("Serif", Font.BOLD, 15));
JComboBox cb = new JComboBox();
cb= new JComboBox(list);
cb.getSelectedIndex();
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
add(label1, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx++;
add(cb, gbc);
JLabel label2 = new JLabel("TO :");
label2.setFont(new Font("Serif", Font.BOLD, 15));
JComboBox cb1 = new JComboBox();
cb1=new JComboBox(list);
cb1.getSelectedIndex();
gbc.gridx = 0;
gbc.gridy++;
gbc.fill = GridBagConstraints.NONE;
add(label2, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx++;
add(cb1, gbc);
JLabel label3 = new JLabel("\n\nENTER THE AMOUNT :");
label3.setFont(new Font("Serif", Font.BOLD, 15));
label3.setHorizontalAlignment(SwingConstants.CENTER);
label3.setVerticalAlignment(SwingConstants.CENTER);
gbc.gridx = 0;
gbc.gridy++;
add(label3, gbc);
JTextField tf1 = new JTextField(15);
gbc.gridx++;
add(tf1, gbc);
JLabel label4 = new JLabel("CONVERTED AMOUNT :");
label4.setFont(new Font("Serif", Font.BOLD, 15));
label4.setDisplayedMnemonic(KeyEvent.VK_O);
gbc.gridx = 0;
gbc.gridy++;
add(label4, gbc);
JTextField tf2 = new JTextField(15);
gbc.gridx++;
add(tf2, gbc);
JPanel buttons = new JPanel();
JButton button1 = new JButton("CONVERT");
button1.setFont(new Font("Serif", Font.BOLD, 15));
button1.setMnemonic(KeyEvent.VK_K);
buttons.add(button1);
JButton button2 = new JButton("CLEAR ");
button2.setFont(new Font("Serif", Font.BOLD, 15));
button2.setMnemonic(KeyEvent.VK_C);
buttons.add(button2);
gbc.gridx = 0;
gbc.gridy++;
gbc.gridwidth = GridBagConstraints.REMAINDER;
add(buttons, gbc);
thehandler handler= new thehandler();
cb.addActionListener(handler);
cb1.addActionListener((ActionListener) handler);
button1.addActionListener((ActionListener) handler);
button2.addActionListener((ActionListener) handler);
tf1.addActionListener((ActionListener) handler);
tf2.addActionListener((ActionListener) handler);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//pack();
setSize(450,250);
setVisible(true);
}
public class thehandler implements ActionListener{
public void actionPerformed(ActionEvent e) {
double a=0,b=0;
a=Double.valueOf(tf1.getText());
{
if(cb.getSelectedIndex()==0 && cb1.getSelectedIndex()==1)
b=a*0.89;
if(cb.getSelectedIndex()==0 && cb1.getSelectedIndex()==2)
b=a*124.75;
if(cb.getSelectedIndex()==0 && cb1.getSelectedIndex()==3)
b=a*0.65;
if(cb.getSelectedIndex()==0 && cb1.getSelectedIndex()==4)
b=a*64.08;
if(cb.getSelectedIndex()==1 && cb1.getSelectedIndex()==0)
b=a*1.13;
if(cb.getSelectedIndex()==1 && cb1.getSelectedIndex()==2)
b=a*140.49;
if(cb.getSelectedIndex()==1 && cb1.getSelectedIndex()==3)
b=a*0.74;
if(cb.getSelectedIndex()==1 && cb1.getSelectedIndex()==4)
b=a*71.34;
if(cb.getSelectedIndex()==2 && cb1.getSelectedIndex()==0)
b=a*0.0080;
if(cb.getSelectedIndex()==2 && cb1.getSelectedIndex()==1)
b=a*0.0071;
if(cb.getSelectedIndex()==2 && cb1.getSelectedIndex()==3)
b=a*0.0052;
if(cb.getSelectedIndex()==2 && cb1.getSelectedIndex()==4)
b=a*0.51;
if(cb.getSelectedIndex()==3 && cb1.getSelectedIndex()==0)
b=a*1.53;
if(cb.getSelectedIndex()==3 && cb1.getSelectedIndex()==1)
b=a*1.36;
if(cb.getSelectedIndex()==3 && cb1.getSelectedIndex()==2)
b=a*191.26;
if(cb.getSelectedIndex()==3 && cb1.getSelectedIndex()==4)
b=a*97.88;
if(cb.getSelectedIndex()==4 && cb1.getSelectedIndex()==0)
b=a*0.0156;
if(cb.getSelectedIndex()==4 && cb1.getSelectedIndex()==1)
b=a*0.014;
if(cb.getSelectedIndex()==4 && cb1.getSelectedIndex()==2)
b=a*1.9607;
if(cb.getSelectedIndex()==4 && cb1.getSelectedIndex()==3)
b=a*0.0108;
tf2.setText(String.valueOf(b));
}
if(e.getSource()==button2){
tf1.setText("0000");
tf2.setText("0000");
}
}
}
}
组件定位是相对于它所属的布局。
如果你真的想自由设置你的 JLabel
和 JButton
的位置,我建议你将布局设置为空:
setLayout(null);
并使用带 4 个参数的 setBounds()
定位 JLabel
。 JLabel
的维度及其坐标。
首先查看 How to Use BorderLayout 以了解其工作原理。
BorderLayout
将只允许在其中放置五个组件,NORTH
、SOUTH
、EAST
、WEST
和 CENTRE
默认情况下,如果您不另外指定,组件将放置在 CENTRE
位置。这意味着只有最后添加的组件才真正被布局。
JLabel#setHorizontal/VerticalAlignment
在标签尺寸较大时会对齐标签的内容,但在FlowLayout
的情况下,它使用标签内容的首选尺寸来决定怎么布置最好,所以一般不会有多余的space
相反,您可以使用 GridBagLayout
,这是一种更复杂但更灵活的布局管理器。
setLayout(new GridBagLayout());
JLabel label1 = new JLabel("FROM :");
label1.setFont(new Font("Serif", Font.BOLD, 15));
JComboBox cb = new JComboBox();
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
add(label1, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx++;
add(cb, gbc);
JLabel label2 = new JLabel("TO :");
label2.setFont(new Font("Serif", Font.BOLD, 15));
JComboBox cb1 = new JComboBox();
gbc.gridx = 0;
gbc.gridy++;
gbc.fill = GridBagConstraints.NONE;
add(label2, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx++;
add(cb1, gbc);
JLabel label3 = new JLabel("\n\nENTER THE AMOUNT :");
label3.setFont(new Font("Serif", Font.BOLD, 15));
label3.setHorizontalAlignment(SwingConstants.CENTER);
label3.setVerticalAlignment(SwingConstants.CENTER);
gbc.gridx = 0;
gbc.gridy++;
add(label3, gbc);
JTextField tf1 = new JTextField(15);
gbc.gridx++;
add(tf1, gbc);
JLabel label4 = new JLabel("CONVERTED AMOUNT :");
label4.setFont(new Font("Serif", Font.BOLD, 15));
label4.setDisplayedMnemonic(KeyEvent.VK_O);
gbc.gridx = 0;
gbc.gridy++;
add(label4, gbc);
JTextField tf2 = new JTextField(15);
gbc.gridx++;
add(tf2, gbc);
JPanel buttons = new JPanel();
JButton button1 = new JButton("CONVERT");
button1.setFont(new Font("Serif", Font.BOLD, 15));
button1.setMnemonic(KeyEvent.VK_K);
buttons.add(button1);
JButton button2 = new JButton("CLEAR ");
button2.setFont(new Font("Serif", Font.BOLD, 15));
button2.setMnemonic(KeyEvent.VK_C);
buttons.add(button2);
gbc.gridx = 0;
gbc.gridy++;
gbc.gridwidth = GridBagConstraints.REMAINDER;
add(buttons, gbc);
有时,您甚至需要组合布局,我已经在这里完成了,使用第二个 JPanel
,对按钮使用 FlowLayout
,因为它会产生居中的预期结果按钮
有关详细信息,请参阅 How to Use GridBagLayout
我正在尝试在屏幕上定位我的标签和按钮。我在这里找到了使用 label3.setHorizontalAlignment(SwingConstants.CENTER); label3.setVerticalAlignment(SwingConstants.CENTER);
设置标签位置的答案,但我的代码没有效果。
此外,在将我的布局从流布局更改为边框布局时,屏幕上只出现一个 Jbutton [CLEAR]。谁能帮我纠正这个问题?
public class Corrected1 extends JFrame {
public JTextField tf1;
public JTextField tf2;
public JLabel label1;
public JLabel label2;
public JLabel label3;
public JLabel label4;
public JButton button1;
public JButton button2;
public JComboBox cb,cb1;
public String[] list={"DOLLARS","EUROS ","YEN","POUNDS","RUPEES"};
public void init() {try {
SwingUtilities.invokeAndWait(new Runnable(){
public void run(){
Corrected();
}
});
} catch (InvocationTargetException exc) {
System.out.println("Error occured due to "+ exc);
exc.printStackTrace();
} catch (InterruptedException exc1) {
System.out.println("Error occured due to "+ exc1);
exc1.printStackTrace();
}
}
public void Corrected(){
setLayout(new GridBagLayout());
JLabel label1 = new JLabel("FROM :");
label1.setFont(new Font("Serif", Font.BOLD, 15));
JComboBox cb = new JComboBox();
cb= new JComboBox(list);
cb.getSelectedIndex();
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
add(label1, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx++;
add(cb, gbc);
JLabel label2 = new JLabel("TO :");
label2.setFont(new Font("Serif", Font.BOLD, 15));
JComboBox cb1 = new JComboBox();
cb1=new JComboBox(list);
cb1.getSelectedIndex();
gbc.gridx = 0;
gbc.gridy++;
gbc.fill = GridBagConstraints.NONE;
add(label2, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx++;
add(cb1, gbc);
JLabel label3 = new JLabel("\n\nENTER THE AMOUNT :");
label3.setFont(new Font("Serif", Font.BOLD, 15));
label3.setHorizontalAlignment(SwingConstants.CENTER);
label3.setVerticalAlignment(SwingConstants.CENTER);
gbc.gridx = 0;
gbc.gridy++;
add(label3, gbc);
JTextField tf1 = new JTextField(15);
gbc.gridx++;
add(tf1, gbc);
JLabel label4 = new JLabel("CONVERTED AMOUNT :");
label4.setFont(new Font("Serif", Font.BOLD, 15));
label4.setDisplayedMnemonic(KeyEvent.VK_O);
gbc.gridx = 0;
gbc.gridy++;
add(label4, gbc);
JTextField tf2 = new JTextField(15);
gbc.gridx++;
add(tf2, gbc);
JPanel buttons = new JPanel();
JButton button1 = new JButton("CONVERT");
button1.setFont(new Font("Serif", Font.BOLD, 15));
button1.setMnemonic(KeyEvent.VK_K);
buttons.add(button1);
JButton button2 = new JButton("CLEAR ");
button2.setFont(new Font("Serif", Font.BOLD, 15));
button2.setMnemonic(KeyEvent.VK_C);
buttons.add(button2);
gbc.gridx = 0;
gbc.gridy++;
gbc.gridwidth = GridBagConstraints.REMAINDER;
add(buttons, gbc);
thehandler handler= new thehandler();
cb.addActionListener(handler);
cb1.addActionListener((ActionListener) handler);
button1.addActionListener((ActionListener) handler);
button2.addActionListener((ActionListener) handler);
tf1.addActionListener((ActionListener) handler);
tf2.addActionListener((ActionListener) handler);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//pack();
setSize(450,250);
setVisible(true);
}
public class thehandler implements ActionListener{
public void actionPerformed(ActionEvent e) {
double a=0,b=0;
a=Double.valueOf(tf1.getText());
{
if(cb.getSelectedIndex()==0 && cb1.getSelectedIndex()==1)
b=a*0.89;
if(cb.getSelectedIndex()==0 && cb1.getSelectedIndex()==2)
b=a*124.75;
if(cb.getSelectedIndex()==0 && cb1.getSelectedIndex()==3)
b=a*0.65;
if(cb.getSelectedIndex()==0 && cb1.getSelectedIndex()==4)
b=a*64.08;
if(cb.getSelectedIndex()==1 && cb1.getSelectedIndex()==0)
b=a*1.13;
if(cb.getSelectedIndex()==1 && cb1.getSelectedIndex()==2)
b=a*140.49;
if(cb.getSelectedIndex()==1 && cb1.getSelectedIndex()==3)
b=a*0.74;
if(cb.getSelectedIndex()==1 && cb1.getSelectedIndex()==4)
b=a*71.34;
if(cb.getSelectedIndex()==2 && cb1.getSelectedIndex()==0)
b=a*0.0080;
if(cb.getSelectedIndex()==2 && cb1.getSelectedIndex()==1)
b=a*0.0071;
if(cb.getSelectedIndex()==2 && cb1.getSelectedIndex()==3)
b=a*0.0052;
if(cb.getSelectedIndex()==2 && cb1.getSelectedIndex()==4)
b=a*0.51;
if(cb.getSelectedIndex()==3 && cb1.getSelectedIndex()==0)
b=a*1.53;
if(cb.getSelectedIndex()==3 && cb1.getSelectedIndex()==1)
b=a*1.36;
if(cb.getSelectedIndex()==3 && cb1.getSelectedIndex()==2)
b=a*191.26;
if(cb.getSelectedIndex()==3 && cb1.getSelectedIndex()==4)
b=a*97.88;
if(cb.getSelectedIndex()==4 && cb1.getSelectedIndex()==0)
b=a*0.0156;
if(cb.getSelectedIndex()==4 && cb1.getSelectedIndex()==1)
b=a*0.014;
if(cb.getSelectedIndex()==4 && cb1.getSelectedIndex()==2)
b=a*1.9607;
if(cb.getSelectedIndex()==4 && cb1.getSelectedIndex()==3)
b=a*0.0108;
tf2.setText(String.valueOf(b));
}
if(e.getSource()==button2){
tf1.setText("0000");
tf2.setText("0000");
}
}
}
}
组件定位是相对于它所属的布局。
如果你真的想自由设置你的 JLabel
和 JButton
的位置,我建议你将布局设置为空:
setLayout(null);
并使用带 4 个参数的 setBounds()
定位 JLabel
。 JLabel
的维度及其坐标。
首先查看 How to Use BorderLayout 以了解其工作原理。
BorderLayout
将只允许在其中放置五个组件,NORTH
、SOUTH
、EAST
、WEST
和 CENTRE
默认情况下,如果您不另外指定,组件将放置在 CENTRE
位置。这意味着只有最后添加的组件才真正被布局。
JLabel#setHorizontal/VerticalAlignment
在标签尺寸较大时会对齐标签的内容,但在FlowLayout
的情况下,它使用标签内容的首选尺寸来决定怎么布置最好,所以一般不会有多余的space
相反,您可以使用 GridBagLayout
,这是一种更复杂但更灵活的布局管理器。
setLayout(new GridBagLayout());
JLabel label1 = new JLabel("FROM :");
label1.setFont(new Font("Serif", Font.BOLD, 15));
JComboBox cb = new JComboBox();
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
add(label1, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx++;
add(cb, gbc);
JLabel label2 = new JLabel("TO :");
label2.setFont(new Font("Serif", Font.BOLD, 15));
JComboBox cb1 = new JComboBox();
gbc.gridx = 0;
gbc.gridy++;
gbc.fill = GridBagConstraints.NONE;
add(label2, gbc);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx++;
add(cb1, gbc);
JLabel label3 = new JLabel("\n\nENTER THE AMOUNT :");
label3.setFont(new Font("Serif", Font.BOLD, 15));
label3.setHorizontalAlignment(SwingConstants.CENTER);
label3.setVerticalAlignment(SwingConstants.CENTER);
gbc.gridx = 0;
gbc.gridy++;
add(label3, gbc);
JTextField tf1 = new JTextField(15);
gbc.gridx++;
add(tf1, gbc);
JLabel label4 = new JLabel("CONVERTED AMOUNT :");
label4.setFont(new Font("Serif", Font.BOLD, 15));
label4.setDisplayedMnemonic(KeyEvent.VK_O);
gbc.gridx = 0;
gbc.gridy++;
add(label4, gbc);
JTextField tf2 = new JTextField(15);
gbc.gridx++;
add(tf2, gbc);
JPanel buttons = new JPanel();
JButton button1 = new JButton("CONVERT");
button1.setFont(new Font("Serif", Font.BOLD, 15));
button1.setMnemonic(KeyEvent.VK_K);
buttons.add(button1);
JButton button2 = new JButton("CLEAR ");
button2.setFont(new Font("Serif", Font.BOLD, 15));
button2.setMnemonic(KeyEvent.VK_C);
buttons.add(button2);
gbc.gridx = 0;
gbc.gridy++;
gbc.gridwidth = GridBagConstraints.REMAINDER;
add(buttons, gbc);
有时,您甚至需要组合布局,我已经在这里完成了,使用第二个 JPanel
,对按钮使用 FlowLayout
,因为它会产生居中的预期结果按钮
有关详细信息,请参阅 How to Use GridBagLayout