全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2760
推到 Plurk!
推到 Facebook!

JPopupMenu的不錯用法--提示功能表

 
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-18 11:28:01 IP:61.64.xxx.xxx 訂閱
有人在某論壇提出一些IDE的"."之後會出現一個提示性的小視窗的實作問題
姑且不論他的model中的樹狀節點如何推論.先由view的方面來看他的實作
這就可以由JPopupMenu來思考,JPopupMenu是一個不錯的載具
參考下以的實作文章:

========原文出處 http://blog.csdn.net/netwarning/archive/2007/03/16/1531711.aspx ========
JPopupMenu是對於Swing開發者是在熟悉不過的組件了,不過大部分人只將其作為右擊彈出菜單使用,其實JPopupMenu還可以有很多用途,可以說只要是需要彈出式效果的都可以用其實現。例如我們用開發工具輸入import java.util.當輸入「.」時會自動彈出提示框選項,以下的小程序展示了這樣的效果:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;
public class PopupTip extends JFrame {
String[] messages = new String[] {
"getNetworkFromTWaver",
"getTreeFromTWaver",
"getTableFromTWaver",
"getPropertySheetFromTWaver",
"getTreeTableFromTWaver",
"getChartFromTWaver",
"getRPCFromTWaver",
"getGUIFrameworkFromTWaver",
"getFantasticIdeaFromTWaver",
};

JLabel label = new JLabel("Please Select Item");
JList list = new JList(messages);
JComponent tip = new JScrollPane(list);
JTextArea text = new JTextArea();
JPopupMenu popup = new JPopupMenu();

public PopupTip() {
super("Please Select Item" );
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(new JScrollPane(text), BorderLayout.CENTER);
this.tip.setPreferredSize(new Dimension(400, 100));
this.label.setForeground(Color.BLUE);
this.label.setHorizontalAlignment(SwingConstants.CENTER);
this.popup.setLayout(new BorderLayout());
this.popup.add(label, BorderLayout.NORTH);
this.popup.add(tip, BorderLayout.CENTER);

this.text.setBackground(Color.BLACK);
this.text.setForeground(Color.GREEN);
this.text.setCaretColor(Color.WHITE);

this.text.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) {
if(popup.isShowing()){
popup.setVisible(false);
}else if (e.getKeyCode() == KeyEvent.VK_PERIOD){
Point point = text.getCaret().getMagicCaretPosition();
if(point != null){
popup.show(text, point.x, point.y);
}
text.requestFocus();
}
}
});
}
public static void main(String[] args) {
PopupTip ui = new PopupTip();
ui.setSize(400, 200);
ui.show();
}
}

=====原文出處 http://blog.csdn.net/netwarning/archive/2007/03/16/1531711.aspx ==========

作業:
試實作類似瀏覽器網址列中,打了一兩個字元後,上例中的JList會選到相對的元素列
(且而JList要捲到可以看到那個元素列才行),如果在網址列中,按了"上下方向鍵"後,PopupMenu的反白會上下移動,相對的,上例的JTextField中,會出現反白元素的字串
系統時間:2024-05-05 23:17:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!