日期:2014-05-20  浏览次数:21621 次

为什么label无法显示?
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;


public class SelectPosition extends JFrame{


private final BorderLayout borderLayout = new BorderLayout();
private final JPanel panel = new JPanel();
private final JLabel label = new JLabel();
public static void main(String[] args) {
SelectPosition frame = new SelectPosition();
frame.setVisible(true);
}

public SelectPosition() {
super();
setTitle("控制内容的对齐方式 ");
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


panel.setLayout(borderLayout);
getContentPane().add(panel, BorderLayout.NORTH);


label.setText("请注意我的位置啊!");

JPanel southPanel = new JPanel();
getContentPane().add(southPanel, BorderLayout.CENTER);

ButtonGroup group = new ButtonGroup();

final JRadioButton leftButton = new JRadioButton();
leftButton.setText("靠左侧显示");
group.add(leftButton);
southPanel.add(leftButton);
leftButton.addActionListener(new leftActionListener());

final JRadioButton middleButton = new JRadioButton();
middleButton.setText("居中显示");
middleButton.setSelected(true);
group.add(middleButton);
southPanel.add(middleButton);
middleButton.addActionListener(new middleActionListener());

final JRadioButton rightButton = new JRadioButton();
rightButton.setText("靠右侧显示");
group.add(rightButton);
southPanel.add(rightButton);
rightButton.addActionListener(new rightActionListener() );
}

class middleActionListener implements ActionListener {
public void actionPerformed(ActionEvent e){
panel.add(label, BorderLayout.CENTER);
}


}
class rightActionListener implements ActionListener {
public void actionPerformed(ActionEvent e){
panel.add(label, BorderLayout.EAST);
}
}

class leftActionListener implements ActionListener {
public void actionPerformed(ActionEvent e){
panel.add(label, BorderLayout.WEST);
}
}

}

------解决方案--------------------
由于你的panel只有一个label,所以使用BorderLayout布局的时候,无论是在north,south,center都是默认占据了整个panel,建议创建三个label对象,分别设为east,center,west,然后按钮的消息响应事件就设置对应的label的setVisible(true),其他的设为false就行了,试过可行了
------解决方案--------------------
监听类的方法里加pack();方法。panel.add(label, BorderLayout.CENTER);这句后面。这样会改变窗体大小。你看一下pacK()方法是干什么的。