如何让你Swing程序不卡死?

来源:互联网 发布:nginx openresty 编辑:程序博客网 时间:2024/05/21 19:28

皮肤测试

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package myswingdemos;

import java.awt.BorderLayout;  
import java.awt.Dimension;  
import java.awt.Toolkit;  
 
import javax.swing.JButton;  
import javax.swing.JFrame;  
import javax.swing.JMenu;  
import javax.swing.JMenuBar;  
import javax.swing.JMenuItem;  
import javax.swing.JPanel;  
import javax.swing.JPopupMenu;  
import javax.swing.JScrollPane;  
import javax.swing.JTable;  
import javax.swing.JTextArea;  
import javax.swing.SwingUtilities;  
import javax.swing.UIManager;  
import javax.swing.table.DefaultTableModel;  
 
import org.jvnet.substance.skin.SubstanceBusinessBlueSteelLookAndFeel;  
import org.jvnet.substance.skin.SubstanceOfficeBlue2007LookAndFeel;
import org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel;
 
public class MainFrame extends JFrame {  
 
    private JMenuBar mainBar = new JMenuBar();  
    private JMenu sysMenu = new JMenu("系统");  
    private JMenuItem exitItem = new JMenuItem("退出");  
    private JMenuItem loginItem = new JMenuItem("登陆");  
    private JMenu aboutMenu = new JMenu("关于");  
    private JMenuItem helpItem = new JMenuItem("帮助");  
      
    private JPopupMenu popup = new JPopupMenu();  
    private JMenuItem sendItem = new JMenuItem("发信息");  
    private JMenuItem infoItem = new JMenuItem("看账户");  
    private JMenuItem logoutItem = new JMenuItem("注销");  
 
    private JTable table;  
    private JScrollPane jspLogin;  
    private JScrollPane jsplogTA;  
    private JPanel displayPanel;  
    private JPanel btnPanel;  
    private JButton dispalyBtn;  
    private JButton preBtn;  
    private JButton nextBtn;  
 
    public static DefaultTableModel defaultModel;  
    public static JTextArea logTA;    
      
    public MainFrame() {  
        super("皮肤测试");  
        setMainBar();  
        setPanel();  
        initFrame(600, 450);  
    }  
      
    private void initFrame(int frameWidth, int frameHeight) {  
        setTitle("皮肤测试");  
        Toolkit tk = Toolkit.getDefaultToolkit();  
        Dimension screenDimension = tk.getScreenSize();  
        int screenWidth = screenDimension.width;  
        int screenHeight = screenDimension.height;  
        setLocation((screenWidth - frameWidth) / 2,  
                (screenHeight - frameHeight) / 2);  
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        setSize(frameWidth, frameHeight);  
        setVisible(true);  
    }     
 
    private void setMainBar() {  
 
        setJMenuBar(mainBar);  
        mainBar.add(sysMenu);  
        mainBar.add(aboutMenu);  
        sysMenu.add(loginItem);  
        sysMenu.addSeparator();  
        sysMenu.add(exitItem);  
        aboutMenu.add(helpItem);  
        popup.add(sendItem);  
        popup.add(infoItem);  
        popup.add(logoutItem);  
    }  
 
    private void setPanel() {  
        String[][] playerInfo = new String[0][0];  
        String[] names = { "用户", "登陆时间", "当前状态" };  
        defaultModel = new DefaultTableModel(playerInfo, names);  
        logTA = new JTextArea();  
        logTA.setLineWrap(true);  
        jsplogTA = new JScrollPane(logTA);  
        table = new JTable(defaultModel);  
        jspLogin = new JScrollPane(table);  
        displayPanel = new JPanel();  
        btnPanel = new JPanel();  
 
        displayPanel.setLayout(new BorderLayout());  
        displayPanel.add(jsplogTA, BorderLayout.CENTER);  
        displayPanel.add(btnPanel, BorderLayout.SOUTH);  
 
        dispalyBtn = new JButton("显示10条");  
        preBtn = new JButton("向前10条");  
        nextBtn = new JButton("向后10条");  
        btnPanel.add(dispalyBtn);  
        btnPanel.add(preBtn);  
        btnPanel.add(nextBtn);  
        jspLogin.setPreferredSize(new Dimension(600, 69));  
        add(jspLogin, BorderLayout.NORTH);  
        add(displayPanel, BorderLayout.CENTER);  
    }     
      
      
    public static void main(String[] args) {  
        try {  
//            new  SubstanceOfficeBlue2007LookAndFeel()
//            org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel
//            UIManager.setLookAndFeel(new SubstanceBusinessBlueSteelLookAndFeel());
            JFrame.setDefaultLookAndFeelDecorated(true);
            UIManager.setLookAndFeel(new  SubstanceOfficeBlue2007LookAndFeel());
        } catch (Exception e) {  
            System.out.println("Substance Raven Graphite failed to initialize");  
        }  
        SwingUtilities.invokeLater(new Runnable() {  
            public void run() {  
                MainFrame w = new MainFrame();  
                w.setVisible(true);  
            }  
        });  
    }  
}

 

---------------------------------------

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package memorymaster;

import java.awt.AWTEvent;
import java.awt.event.WindowEvent;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

/**
 *
 * @author Administrator
 */
public class ScrollBottom extends JFrame{
   private JTextArea ta = new JTextArea();
   private Timer timer = new Timer();

    public ScrollBottom() {
        super();
        enableEvents(AWTEvent.WINDOW_EVENT_MASK);
        init();
    }

    private void init() {
        this.setBounds(0,0,300,150);
        final JScrollPane sp = new JScrollPane(ta);
        this.getContentPane().add(sp,"Center");
        ta.setText("Start.....\n");
        TimerTask task = new TimerTask(){
            public void run(){
                ta.append("Time: " + (System.currentTimeMillis() / 1000) + "\n");
                ta.setCaretPosition(ta.getText().length());
            }    
        };
        timer.schedule(task, 0, 1000);
    }
   
    public void scrollAndSetCursor(){
        ta.setSelectionStart(ta.getText().length());
    }
   
     protected void processWindowEvent(WindowEvent e){
              super.processWindowEvent(e);    
              if(e.getID() == WindowEvent.WINDOW_CLOSING)      
              {
                   System.exit(0);
              }
     }
     public static void main(String[] args) {
        new ScrollBottom().setVisible(true);
    }
}

-----------------------------------------------

(1) 在JTextArea插入最后一条消息之后,使用selectAll()将光标强制移动到JTextArea的最后,实现滚动条的自动滚动。(Aviva中采用的方式)

(2) 在JTextArea插入最后一条消息之后,使用textArea.setCaretPosition(textArea.getText().length()),将光标移到最后,实现滚动条的自动滚动。

(3) 在JTextArea加载了自动滚动条JScroll之后,将JTextArea加入到JScrolPanel的ViewPort中: (有一些Bug,使得图像有点闪烁)
     recvScrollPane.getViewport().add(recvArea, null);
     然后在JTextArea插入最后一条新消息之后,将滚动条的Viewport重新设置到最底端的位置:
     int height = 10;
     Point p = new Point();
     p.setLocation(0, recvArea.getLineCount() * height);
     recvScrollPane.getViewport().setViewPosition(p);

(4)直接设置垂直滚动条的值

        JScrollBar bar = pane.getVerticalScrollBar();
        bar.setValue(20);

---------------------------------------------------

如何在JTree找到某一层中的所有节点?
    建立一个JTree的遍历,再通过next循环判断get那个node的path再getpathcount()判断==3,再把得到的节点存到一个什么容器里
    
    8。遍历树的所有节点<从根遍历或从某一个节点遍历>
public static void visitAllNodes(JTree tree) {
  TreeNode root = (TreeNode) tree.getModel().getRoot();
  visitAllNodes(tree,root);
 }

 public static void visitAllNodes(JTree tree,TreeNode node) {
  // node is visited exactly once
  //you can do your things about this node,such as:
  tree.makeVisible(new TreePath(
    ((DefaultTreeModel)tree.getModel()).getPathToRoot(node)));

  if (node.getChildCount() >= 0) {
   for (Enumeration e = node.children(); e.hasMoreElements();) {
    TreeNode n = (TreeNode) e.nextElement();
    visitAllNodes(tree,n);
   }
  }
 }
9。遍历树已经展开的节点<从根遍历或从某一个节点遍历>
// Traverse all expanded nodes in tree
 public static void visitAllExpandedNodes(JTree tree) {
  TreeNode root = (TreeNode) tree.getModel().getRoot();
  visitAllExpandedNodes(tree, new TreePath(root));
 }

 public static void visitAllExpandedNodes(JTree tree, TreePath parent) {
  // Return if node is not expanded
  if (!tree.isVisible(parent)) {
   return;
  }

  // node is visible and is visited exactly once
  TreeNode node = (TreeNode) parent.getLastPathComponent();
  //you can do your things about this node,such as:
  System.out.println(node.toString());

  // Visit all children
  if (node.getChildCount() >= 0) {
   for (Enumeration e = node.children(); e.hasMoreElements();) {
    TreeNode n = (TreeNode) e.nextElement();
    TreePath path = parent.pathByAddingChild(n);
    visitAllExpandedNodes(tree, path);
   }
  }
 }

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 精子总活力和运动力低怎么办 精子少畸形高怎么办能治好吗 小米无人机只能飞500米远怎么办 考察课作弊被老师抓了怎么办 手机中木马病毒了钱被盗走了怎么办 在搜不到校园网的情况下怎么办 刚买小鸡第四天晚上一直叫怎么办 碘131第四天晚上吃太撑了怎么办 出现请点击画面开始进行校准怎么办 大学毕业后才发现荒废了学业怎么办 房屋面积重新测量超了一倍怎么办 物管把业主的电断了怎么办 在人多的场合紧张不适应怎么办 人寿人身损害勘查结果有争议怎么办 批量性不良再限度样本规格内怎么办 老公说老婆不攒钱都买衣服了怎么办 华为手机获取安装包信息失败怎么办 液压电动脱模器不上升了怎么办 退伍军人证和身份证名字不付怎么办 车辆有违章需要短信提醒要怎么办 1969年退伍的退伍证丢了怎么办 江苏移动没实名认证停机了怎么办呀 亿达老年手机来电音量太大怎么办 挑三十六乘二的内螺纹丝瞳毛怎么办 内六角螺丝的冒滑了怎么办 孔里的内六角滑了怎么办 十字螺丝刀的头卡在螺母里怎么办 内六角扳手断在螺丝孔里怎么办 六棱螺丝刀折进螺丝里了怎么办 内6棱螺丝拧花了怎么办 只有pe模式可以用键盘鼠标怎么办 电脑重做了系统连不上无线网怎么办 联想手机死机了怎么办不可拆卸电池 手机界面弹出后大小无法调整怎么办 方向盘打方向瑟瑟的吱吱响怎么办 三脚架提升杆螺丝滑丝了怎么办 花土里面有很多细长的螺丝怎么办 防盗门外边上边缝宽螺丝松了怎么办 填充墙与框架梁不对齐怎么办 亚轧滚珠丝杠螺帽超程了怎么办 在公司交的五险一金辞职了怎么办