JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java SE 討論區 » Swing/AWT/SWT/JFace  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友   
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 Re:JList內是否有辦法放多個物件,如JLabel+JButton [Re:meanmean]
bluewingsky





發文: 409
積分: 0
於 2015-06-16 09:49 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
啊,抱歉,之前沒在JList裡用過JButton,
所以不知道有這個問題,聽說是用JTable可以解決,
但是JTable我不太熟,
對我來說,比起研究它,自己寫一個模擬JList的JPanel還比較快。

用滑鼠事件"可能"可以,但我猜應該不會有按下的視覺效果。

我另外寫了模擬JList的JPanel,
只需要在加入的元件座標上,做一點點計算,就可以做成類似JList一樣。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import java.awt.*;
import java.awt.event.*;
import java.util.EventObject;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.border.BevelBorder;
 
public class test3 extends JFrame{
 
    //代替JList的JPanel
    JPanel list=new JPanel(){
        //覆寫
        public Component add(Component c)
        {
            /*
            *c就是加入List的JPanel,它的x、width、height都是固定的,
            *只有y需要跟著加入的數量而跟著變動,
            * 所以要先取得list的元件數,然後再乘與適當的距離
            * 因為c的固定高度是50,加上給它5的間距,所以是乘與55
            * 另外的+5是第一個元件與上邊框的距離                ,
            */
            c.setBounds(5,getComponentCount()*55+5,290,50);
            super.add(c);//設定好之後,加入list
 
            /*
            *如果加入的數量總高度超過list的高度,就動態的增加高度,
            *JPanel要用setPreferredSize(new Dimension(int,int))這個方法改變大小,
            *才能讓捲軸有作用
            */
            if(getHeight()<=getComponentCount()*55+5)
                setPreferredSize(new Dimension(300, getComponentCount()*55+5));
 
            return c;
        }
    };
 
    JScrollPane jscrollPane=new JScrollPane(list);//捲軸
 
    //這是用來控制List點選時,底色的切換
    JPanel tmpPnl=null;
    //做List點選時底色切換的事件處理
    MouseAdapter listener=new MouseAdapter(){
        public void mousePressed(MouseEvent e){
            JPanel pnl=(JPanel)e.getSource();
 
            //將前一次的底色還原
            if(tmpPnl!=null)
                tmpPnl.setBackground(Color.white);
            //設定點選的底色
            pnl.setBackground(Color.cyan);
            tmpPnl=pnl;//標記起來,作為下一次切換時,還原底色使用
        }
    };
 
    //JButton的事件處理
    ActionListener Alistener=new ActionListener()
    {
        public void actionPerformed(ActionEvent e){
            JButton btn= (JButton)e.getSource();
            System.out.println("JButton 事件:"+btn.getText());
        }
    };
 
    public test3() {
        setBounds(200,200,500,500);
        setLayout(null);
 
        list.setBackground(Color.white);
        jscrollPane.setBounds(10,10,325,400);
 
        list.setLayout(null);
        add(jscrollPane);
 
        /*要加入List的項目的設置
        *將元件放入JPanel中,再把這個JPanel放進List
        */
        for(int i=0;i<15;i++)
        {
            JPanel pnl=new JPanel();
            pnl.setLayout(null);
            pnl.setBackground(Color.white);
 
            JButton btn=new JButton("按鈕"+(i+1));
            btn.setBounds(5,5,100,35);
            pnl.add(btn);
            btn.addActionListener(Alistener);
 
            JLabel lab=new JLabel("文字");
            lab.setBounds(130,5,100,35);
            pnl.add(lab);
 
            list.add(pnl);//加入list
 
            pnl.addMouseListener(listener);
        }
 
        setVisible(true);
    }
 
    public static void main(String[] args) {
        new test3();
    }
 
}


bluewingsky edited on 2015-06-16 11:36
reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
1958 JList內是否有辦法放多個物件,如JLabel+JButton meanmean 542 2015-06-13 06:41
1855 Re:JList內是否有辦法放多個物件,如JLabel+JButton bluewingsky 371 2015-06-13 07:11
1859 Re:JList內是否有辦法放多個物件,如JLabel+JButton meanmean 12 2015-06-14 05:28
1781 Re:JList內是否有辦法放多個物件,如JLabel+JButton as0955344054 131 2015-06-15 03:45
1777 Re:JList內是否有辦法放多個物件,如JLabel+JButton bluewingsky 1836 2015-06-15 15:13
1820 Re:JList內是否有辦法放多個物件,如JLabel+JButton meanmean 72 2015-06-15 20:02
1742 Re:JList內是否有辦法放多個物件,如JLabel+JButton bluewingsky 3010 2015-06-16 09:49
1736 Re:JList內是否有辦法放多個物件,如JLabel+JButton as0955344054 167 2015-06-16 11:49
1779 Re:JList內是否有辦法放多個物件,如JLabel+JButton meanmean 85 2015-06-16 13:03
1751 Re:JList內是否有辦法放多個物件,如JLabel+JButton bluewingsky 162 2015-06-16 16:01
1819 Re:JList內是否有辦法放多個物件,如JLabel+JButton as0955344054 56 2015-06-16 16:39
» JWorld@TW »  Java SE 討論區 » Swing/AWT/SWT/JFace

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8