java懸浮控制元件、IDE的懸浮窗(帶代…
阿新 • • 發佈:2019-02-05
學習過程極其艱難,網上資料凌亂。先上圖
事情起因:想自己寫個簡單的程式設計IDE。 需要實現這樣一個功能,敲了幾個字母以後,彈出個jlist讓我選擇用哪些函式。然後一直就卡在不懂怎麼把這個jlist合適地疊加在上面的方式了。於是從各種textarea、textpane啊、找到popupmenu啊再找到layer設定啊,總算有個思路。 不過目前這個方法有個缺陷,就是這個jList不能超出這個視窗。而一個正常的IDE顯然可以實現這樣的彈出式選單。
目前算是個折中手段,以下是java程式碼: import java.awt.Color; import java.awt.Dimension; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.DefaultListModel; import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JLayeredPane; import javax.swing.JList; public final class JLayeredPane1 extends JFrame { public JLayeredPane1() { super("JLayeredPane"); JList jl1 = new JList(); DefaultListModel dlm = new DefaultListModel(); dlm.addElement("asdfwfewfw"); dlm.addElement("asdfwf124234ewfw"); dlm.addElement("asdfwf123ewfw"); jl1.setModel(dlm); JEditorPane jep1 = new JEditorPane(); jep1.setBackground(Color.yellow); jep1.setBounds(0, 0, 300, 300); //在這裡調整控制元件的顯示位置和大小 jl1.setBounds(100,100,100,400); //在這裡調整控制元件的顯示位置和大小 JLayeredPane layeredPane = getLayeredPane(); layeredPane.add(jep1, 10, 1); layeredPane.add(jl1, 10, 0); setSize(new Dimension(280, 280)); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); this.setVisible(true); } public static void main(String[] args) { new JLayeredPane1(); } }
事情起因:想自己寫個簡單的程式設計IDE。 需要實現這樣一個功能,敲了幾個字母以後,彈出個jlist讓我選擇用哪些函式。然後一直就卡在不懂怎麼把這個jlist合適地疊加在上面的方式了。於是從各種textarea、textpane啊、找到popupmenu啊再找到layer設定啊,總算有個思路。 不過目前這個方法有個缺陷,就是這個jList不能超出這個視窗。而一個正常的IDE顯然可以實現這樣的彈出式選單。
目前算是個折中手段,以下是java程式碼: import java.awt.Color; import java.awt.Dimension; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.DefaultListModel; import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JLayeredPane; import javax.swing.JList; public final class JLayeredPane1 extends JFrame { public JLayeredPane1() { super("JLayeredPane"); JList jl1 = new JList(); DefaultListModel dlm = new DefaultListModel(); dlm.addElement("asdfwfewfw"); dlm.addElement("asdfwf124234ewfw"); dlm.addElement("asdfwf123ewfw"); jl1.setModel(dlm); JEditorPane jep1 = new JEditorPane(); jep1.setBackground(Color.yellow); jep1.setBounds(0, 0, 300, 300); //在這裡調整控制元件的顯示位置和大小 jl1.setBounds(100,100,100,400); //在這裡調整控制元件的顯示位置和大小 JLayeredPane layeredPane = getLayeredPane(); layeredPane.add(jep1, 10, 1); layeredPane.add(jl1, 10, 0); setSize(new Dimension(280, 280)); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); this.setVisible(true); } public static void main(String[] args) { new JLayeredPane1(); } }