2011-11-18 23 views
6

Đây sẽ là một câu hỏi thực sự lý thuyết, chỉ cần chịu với tôi một chút. Tôi cần phải làm một cái gì đó với JButtons của tôi, và tôi không có ý tưởng bắt đầu từ đâu.Làm thế nào để thực sự chọn một JButton

Vì vậy, những gì tôi cần là để có thể bấm vào một JButton, và có một bằng chứng trực quan rằng nó được chọn, ví dụ như một đường viền màu đỏ hoặc nền trắng hoặc một cái gì đó. Và tôi muốn nó ở lại như thế cho đến khi một JButton khác được chọn theo cùng một cách. Ngay bây giờ, khi tôi nhấp vào một Jbutton có một màn hình hiển thị hình ảnh ngắn mà nó đã được nhấp, nhưng tôi không thể làm cho nó kéo dài lâu hơn.

Tôi đã cố gắng chơi một chút với ChangeListeners, nhưng không có kết quả nào.

Vì vậy, câu hỏi của tôi về cơ bản: bạn sẽ khuyên bạn nên thử phương pháp tiếp cận nào?

1 - quay trở lại ChangeListener, đó là lựa chọn duy nhất 2 - JButton có một lựa chọn mà không chính xác điều đó

Xin lỗi nếu nó quá mơ hồ, nhưng mọi thứ khác tôi thấy được siêu đặc biệt, và không trả lời những câu hỏi của tôi.

Trả lời

10

Tôi tự hỏi nếu bạn muốn sử dụng nút JToggleButton, có lẽ một người được thêm vào ButtonGroup để chỉ một nút được chọn tại một thời điểm.

chỉnh sửa
ví dụ:

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 

public class ToggleArray extends JPanel { 
    private static final int SIDE = 5; 

    public ToggleArray() { 
     ActionListener listener = new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      System.out.println("Button selected: " + e.getActionCommand()); 
     } 
     }; 

     setLayout(new GridLayout(SIDE, SIDE)); 
     ButtonGroup btnGroup = new ButtonGroup(); 
     for (int i = 0; i < SIDE * SIDE; i++) { 
     String text = String.format("[%d, %d]", i % SIDE, i/SIDE); 
     JToggleButton btn = new JToggleButton(text); 
     btn.addActionListener(listener); 
     btnGroup.add(btn); 
     add(btn); 
     } 
    } 

    private static void createAndShowGui() { 
     ToggleArray mainPanel = new ToggleArray(); 

     JFrame frame = new JFrame("ToggleArray"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 

đó sẽ như thế nào:
enter image description here

+0

+1, gợi ý tốt . – mre

+0

+1 không phải về JToggleButton nhưng về ButtonGroup http://tips4java.wordpress.com/2008/11/09/select-button-group/ – mKorbel

+0

oooh, vâng, có thể là chính xác những gì tôi cần, cảm ơn :) –

0

Bạn có thể thử thay đổi màu nền:

boolean jButton1clicked = false; 

jButton1.addActionListener(new ActionListener(){ 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     jButton1selected = !jButton1selected; 
    } 
); 

jButton1.setBackgroundColor(jButton1clicked ? Color.green : Color.red); 
+1

Điều này không có hiệu lực rõ ràng trên một số triển khai Look & Feel. – trashgod

Các vấn đề liên quan