2012-04-27 37 views
12

Tôi muốn một JPanel có kích thước và vị trí được xác định. Bên trong JPanel, tôi đã xác định số phần tử (nút) nhất định được chèn theo chiều ngang. Bởi vì JPanel của tôi có chiều rộng xác định, nếu tôi thêm nhiều nút, tôi không thể thấy điều đó. Trong trường hợp này, tôi cần một thanh cuộn cho JPanel này. Nhưng JPanel này phải là một SIZE CERTAIN IN A POSER CERTAIN bên trong một JFrame. Thanh cuộn của JPanel đã được đặt dưới nó theo chiều ngang. Ai đó có thể giúp tôi? Tôi đã thử nó mà không thành công!Cuộn một JPanel

+0

AFAIK, điểm mấu chốt là kể từ khi bạn 'JPanel' đã một' Defined Width/Height/Size', do đó khi bạn thêm bất cứ điều gì với nó, vượt ra khỏi kích thước của nó, bạn không thể nhìn thấy điều đó, ngay cả với ' JScrollPane' được thêm vào nó, vì ngay cả 'JScrollPane' không thể vượt quá kích thước của' JPanel', vì vậy các thành phần đó luôn bị ẩn: (Vì nếu bạn không định nghĩa kích thước của nó, các thành phần được thêm vào đầu tiên của 'JPanel' và sau đó là 'preferredSize()' được xác định ngầm bởi 'doLayout()' loại thingies, do đó 'JScrollPane' của bạn hoạt động trong tình huống đó, nhưng không phải ở đây. –

+1

Cũng xem xét [' JToolBar'] (http://docs.oracle) .com/javase/tutorial/uiswing/components/toolbar.html) hoặc [layout phù hợp] (http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html). Không có [sscce] (http://sscce.org/) làm rõ ý nghĩa của _xác định size_ và _certain position_, câu hỏi này không thể được trả lời dưới dạng hiện tại. – trashgod

Trả lời

17

Sử dụng JScrollPane và ép tùy chọn của nóSize thành kích thước nhất định của bạn (hoặc đặt hộp chứa scrollPane LayoutManager thành null và gọi setBounds() trên thanh cuộn). Đồng thời đặt chính sách thanh cuộn. Dưới đây là một mẫu nhỏ rằng:

import java.awt.Dimension; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 

public class Test { 

    public static void main(String... args) { 
     JFrame frame = new JFrame(); 
     JPanel panel = new JPanel(); 
     for (int i = 0; i < 10; i++) { 
      panel.add(new JButton("Hello-" + i)); 
     } 
     JScrollPane scrollPane = new JScrollPane(panel); 
     scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
     scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); 
     scrollPane.setBounds(50, 30, 300, 50); 
     JPanel contentPane = new JPanel(null); 
     contentPane.setPreferredSize(new Dimension(500, 400)); 
     contentPane.add(scrollPane); 
     frame.setContentPane(contentPane); 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 
+0

Emm, vấn đề là tôi cần phải xác định vị trí JPanel ở một vị trí cụ thể của JFrame. Ngoài ra, nó phải có một kích thước nhất định. – Chu

+0

@BrallanAguilar hoặc là bạn sử dụng một LayoutManager để định vị và kích thước các thành phần của bạn, hoặc đặt LayoutManager thành null và gọi setBounds() để định vị và kích thước thành phần của bạn. Trong trường hợp này, bạn phải làm điều đó trên JScrollPane –

+0

Bạn có thể giúp tôi với một ví dụ không? – Chu

5

Thêm tất cả các nút vào bảng điều khiển của bạn. Sau đó, thêm bảng này vào scrollpane.

panel.add(button1); 
panel.add(button2); 
panel.add(button3); 
. 
. 
. 
panel.add(buttonn); 

Khi bạn thêm các nút vào bảng điều khiển, hãy thêm bảng vào ô cuộn.

JScrollPane panelPane = new JScrollPane(panel); 

Sau đó thêm bảng này vào khung của bạn.

+0

Xin lỗi, nhưng tôi cần một phần của JPanel ở kích thước và vị trí xác định. Ngoài ra, hướng của thanh cuộn :) – Chu

+0

Xin lỗi ít người nghèo bằng tiếng Anh .. 'determinate' có nghĩa là gì? –

+0

"cụ thể" jeje: D – Chu

4

Dưới đây là một số giải pháp khả thi:

hoặc

  • để di chuyển đến quyết định Point hoặc Rectangle có tồn tại phương thức scrollRectToVisible ví dụ: myPanel.scrollRectToVisible(myButton.getBounds());