如何让你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);
}
}
}
- 如何让你Swing程序不卡死?
- java swing编程时如何让程序窗口居中显示
- 如何让你的程序定义顾明见意
- 如何让你的程序支持HA?
- 如何编写高效swing程序
- 如何让你的程序安全通过windows防火墙
- 如何让你的程序界面更漂亮
- 如何让你的程序安全通过windows防火墙
- 如何让浏览器调用你的程序来打开资源
- 如何让你的iphone程序支援ipad.
- 如何让你的iPhone程序支持多语言环境
- 如何让你的iPhone程序支持多语言环境
- 如何让你的iPhone程序支持多语言环境
- 如何让你的iPhone程序支持多语言环境
- 如何让浏览器调用你的程序来打开资源
- 如何让你的 VB 程序运行的更加高效
- 如何让你的linux程序在后台静默执行?
- 如何让你脱颖而出
- SQL匹配多字段进行排序,搜索
- SQL Server 2005异地备份
- VC中分割字符串的AfxExtractSubString函数
- Part1:NCR RKT技术之(基于NDC)--RSA算法在RKT中的应用
- listView -----------> scroll to specifyed
- 如何让你Swing程序不卡死?
- XNA那些事(八)-WINDOWS PHONE游戏中的摄像机全总结
- 显示游标
- Part2:NCR RKT( 基于NDC)完整解决方案--NCR RKT流程
- AudioTrack实例代码 C++代码
- sizeof数据对齐问题
- 关于定时任务的一点思考(二)
- SVN入门及配置使用
- 在win下使用mkisofs