private void setUpUIComponent()
{
setSize(400, 300);
setResizable(false);
JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("File");
menuNew = new JMenuItem("New");
menuNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
InputEvent.CTRL_MASK));
menuOpen = new JMenuItem("Open PVD...");
menuOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
InputEvent.CTRL_MASK)); menuBuild = new JMenuItem("Build PVD...");
menuBuild.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,
InputEvent.CTRL_MASK)); menuClose = new JMenuItem("Quit");
menuClose.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,
InputEvent.CTRL_MASK));
fileMenu.add(menuNew);
fileMenu.add(menuOpen);
fileMenu.add(menuBuild);
fileMenu.addSeparator();
fileMenu.add(menuClose); JMenu aboutMenu = new JMenu("About");
menuAbout = new JMenuItem("About PVD Builder");
aboutMenu.add(menuAbout); menuBar.add(fileMenu);
menuBar.add(aboutMenu);
setJMenuBar(menuBar);
Container contentPane = getContentPane();
setLayout(new BoxLayout(contentPane,BoxLayout.Y_AXIS));
lblSummary = new JLabel("Summary:");
lblDescription = new JLabel("Description");
contentPane.add(lblSummary);
txtSummary = new JTextArea();
txtSummary.setFont(new Font("微软雅黑", Font.PLAIN, 16));
txtSummary.setLineWrap(true);
JScrollPane panel = new JScrollPane(txtSummary,
ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
contentPane.add(panel); txtDescription = new JTextArea();
txtDescription.setFont(new Font("微软雅黑", Font.PLAIN, 16));
txtDescription.setLineWrap(true);
JScrollPane panel2 = new JScrollPane(txtDescription,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
contentPane.add(lblDescription);
contentPane.add(panel2); stateBar = new JLabel("New");
stateBar.setHorizontalAlignment(SwingConstants.LEFT);
stateBar.setBorder(BorderFactory.createEtchedBorder());
contentPane.add(stateBar); }我想从上倒下, 左对齐排列lblSummary, txtSummary, lblDescription, txtDescription, stateBar这5个控件, 其中txtSummary的宽度是txtDescription的1/3, 且限制输入字符为20个. 但以上代码的结果和我需要的不太一致, 麻烦帮我改一下.
我是用Eclipse开发的, 虽然NetBeans做GUI很方便也美观但是还不习惯. 所以不要给出什么换个IDE的答非所问的答案. 布局只要能满足需要就可以了, 不限制.
我也是想学习才试着弄了弄 呵呵 gui设计没怎么学 里面还有几个问题不清楚 我再去问问别人
反正就是用setbounds这个方法设置位置,还有就是那个20个字的可以用行数和列数确定,不过要是确定总数得另写KeyListener
代码 如下package test;import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class test extends JFrame { public test() {
int width = 400;
int height = 300;
setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(width, height);
setResizable(true); JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("File"); JMenuItem menuNew = new JMenuItem("New");
menuNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
InputEvent.CTRL_MASK)); JMenuItem menuOpen = new JMenuItem("Open PVD...");
menuOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
InputEvent.CTRL_MASK)); JMenuItem menuBuild = new JMenuItem("Build PVD...");
menuBuild.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,
InputEvent.CTRL_MASK)); JMenuItem menuClose = new JMenuItem("Quit");
menuClose.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,
InputEvent.CTRL_MASK));
fileMenu.add(menuNew);
fileMenu.add(menuOpen);
fileMenu.add(menuBuild);
fileMenu.addSeparator();
fileMenu.add(menuClose); JMenu aboutMenu = new JMenu("About");
JMenuItem menuAbout = new JMenuItem("About PVD Builder");
aboutMenu.add(menuAbout); menuBar.add(fileMenu);
menuBar.add(aboutMenu);
setJMenuBar(menuBar); Container contentPane = this.getContentPane(); JLabel lblSummary = new JLabel("Summary:");
lblSummary.setBounds(0, 0, 80, 25); JTextArea txtSummary = new JTextArea();
txtSummary.setFont(new Font("微软雅黑", Font.PLAIN, 16));
txtSummary.setLineWrap(true);
JScrollPane panel = new JScrollPane(txtSummary,
ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
panel.setBounds(0, 30, 80, 25); JLabel lblDescription = new JLabel("Description");
lblDescription.setBounds(0, 60, 240, 25); JTextArea txtDescription = new JTextArea();
txtDescription.setFont(new Font("微软雅黑", Font.PLAIN, 16));
txtDescription.setLineWrap(true);
JScrollPane panel2 = new JScrollPane(txtDescription,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
panel2.setBounds(0, 90, 240, 50); JLabel stateBar = new JLabel("New");
stateBar.setBounds(10, 150, 80, 25);
JLabel stateBar1 = new JLabel("");
stateBar.setBounds(0, 150, 80, 25); contentPane.add(lblSummary);
contentPane.add(panel);
contentPane.add(lblDescription);
contentPane.add(panel2);
contentPane.add(stateBar);
contentPane.add(stateBar1);
this.setVisible(true);
} public static void main(String[] args) {
new test();
}
}
import javax.swing.JFrame;
import javax.swing.JLabel;public class TestLayout extends JFrame{
public TestLayout() {
this.setLayout(new BoxLayout(this.getContentPane(),BoxLayout.Y_AXIS));
this.setSize(new Dimension(600,400));
JLabel label1 = new JLabel("1");
this.add(label1);
JLabel label2 = new JLabel("2");
this.add(label2);
JLabel label3 = new JLabel("3");
this.add(label3);
JLabel label4 = new JLabel("4");
this.add(label4);
this.setVisible(true);
}
public static void main(String[] args){
TestLayout tl = new TestLayout();
}
}
楼上的那段代码如果在加入一个text组件的话, 标签和text组件就不是左对齐了. 标签会往east方向漂移.
搞定了, 散分.
还是用的2楼的使用绝对坐标的方法, 没使用布局管理器了.
限制输入的问题靠setDocument(new PlainDocument()解决.
private void setUpInsertListener()
{
txtSummary.setDocument(new PlainDocument()
{
public void insertString(int offset,String str,AttributeSet as)
throws BadLocationException{
if(this.getLength()+str.length() >= 26)
{
java.awt.Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(null, "Summary should less than 20 characters!",
"Error",JOptionPane.WARNING_MESSAGE);
}
else
super.insertString(offset,str,as);
}
});
}