当前位置: 代码迷 >> J2SE >> 关于Swing的有关问题.求大牛指点迷津.
  详细解决方案

关于Swing的有关问题.求大牛指点迷津.

热度:97   发布时间:2016-04-24 00:41:11.0
关于Swing的问题...求大牛指点迷津....
package com.vampire;

import java.awt.*;

import javax.swing.*;

public class CharClient extends JFrame{
private static final long serialVersionUID = -989848674198876434L;

public CharClient(){
setTitle("CharClient");
Container rq = getContentPane();
setVisible(true);
setBounds(300,100,260,350);
setLayout(new BorderLayout());

JPanel p1 = new JPanel(new BorderLayout());
JTextField wbk = new JTextField();//文本框
p1.add(BorderLayout.CENTER,wbk);
JButton an = new JButton("发送"); //按纽
p1.add(BorderLayout.EAST,an);
rq.add(BorderLayout.SOUTH,p1);

JTextArea wby = new JTextArea("欢迎使用CharClient\n",60,0);//文本域
wby.setLineWrap(true);
JScrollPane p2 = new JScrollPane(wby);
rq.add(BorderLayout.CENTER,p2);
}

public static void main(String[] args){
new CharClient();
}
}
不知道为什么程序运行后只能改变面板大小才能显示内容....求解....


还有本人自学新手....程序有哪些写的不好的地方求指教...

谢谢了!!!!

------解决方案--------------------
把 setVisible()方法放在最后调用就可以解决这个问题了,就是在new CharClient().setVisible(true),已测试可行。
你在一些组件还为初始化的时候就调用setVisible()方法会对后期的一些组件属性的设置造成一些影响
------解决方案--------------------
一般先把界面布置好后,最后用
setVisible(true);
------解决方案--------------------
3L说了
LZ把setVisible(true)放在构造方法的最后就可以了
因为setVisible就会把窗体画到屏幕上,所以后面添加的组件如果不发生重绘(repaint)事件的话,就有可能显示不了,所以LZ一开始看到的组件没有显示,但是修改面板大小会发生重绘事件,所以组建会被重新画出来,所以LZ就能看到组建显示了

------解决方案--------------------
Java code
import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import javax.swing.*;public class ChatClientFrame extends JFrame {    private JTextArea textArea;  private Action send;  private JTextField inputField;  public ChatClientFrame(String title) {        super(title);        textArea = new JTextArea();    textArea.setEditable(false);    textArea.setLineWrap(true);        send = new AbstractAction("Send") {      @Override      public void actionPerformed(ActionEvent e) {                String message = inputField.getText();        inputField.setText("");        // ... send message logic      }    };        inputField = new JTextField();        layoutComponents();    pack();  }    private void layoutComponents() {        textArea.setPreferredSize(new Dimension(500, 500));    JScrollPane center = new JScrollPane(textArea);    center.setBorder(BorderFactory.createCompoundBorder(            center.getBorder(),            BorderFactory.createEmptyBorder(5, 5, 5, 5)));        FlowLayout layout = new FlowLayout(FlowLayout.LEFT);    JPanel south = new JPanel(layout);        JButton button = new JButton(send);    int width = center.getPreferredSize().width -                 button.getPreferredSize().width -                (layout.getHgap() * 3);        int height = button.getPreferredSize().height;        inputField.setPreferredSize(new Dimension(width, height));        south.add(inputField);    south.add(button);        getContentPane().add(center, BorderLayout.CENTER);    getContentPane().add(south, BorderLayout.SOUTH);  }    public static void main(String[] args) {        SwingUtilities.invokeLater(new Runnable() {      @Override      public void run() {                JFrame f = new ChatClientFrame("Chat Client");        f.setLocationRelativeTo(null);        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        f.setVisible(true);      }    });  }}