Tôi gặp sự cố nhỏ khi sử dụng JScrollPane
trong ứng dụng Java của mình.Thay đổi kích cỡ JScrollPane chứa JPanel khi thanh cuộn xuất hiện
Tôi có một số JScrollPane
có chứa JPanel
. JPanel
này được cập nhật động bằng các nút (theo thứ tự theo chiều dọc) có thể có chiều rộng bất kỳ. Các JPanel
tự động điều chỉnh chiều rộng của nó thành lớn nhất JButton
thành phần bên trong.
Bây giờ khi thanh cuộn dọc xuất hiện, nó sẽ lấy một số khoảng trống ở bên phải của JPanel
, làm cho các nút lớn nhất không xuất hiện hoàn toàn. Tôi không muốn sử dụng thanh cuộn ngang ngoài việc hiển thị toàn bộ nút.
Có cách nào để thay đổi kích thước JPanel
khi thanh cuộn xuất hiện, để thanh xuất hiện độc đáo bên cạnh các nút của tôi không? Hoặc có cách nào khác để thanh cuộn xuất hiện bên cạnh JPanel
của tôi không?
Cảm ơn trước!
EDIT: Đây là bản trình diễn về sự cố của tôi. Khi bạn thay đổi kích thước cửa sổ thành chiều cao nhỏ hơn, một phần nhỏ của các nút ở bên phải sẽ được che phủ.
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import java.awt.GridLayout;
/**
* @author Dylan Kiss
*/
public class Demo {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
JFrame myFrame = new JFrame("Demo");
JPanel sideBar = new JPanel();
JPanel centerPanel = new JPanel();
centerPanel.add(new JLabel("This is the center panel."));
JPanel buttonContainer = new JPanel();
JButton myButton = null;
for (int i = 0; i < 20; i++) {
buttonContainer.setLayout(new GridLayout(20, 1, 0, 0));
myButton = new JButton("This is my button nr. " + i);
buttonContainer.add(myButton);
}
sideBar.setLayout(new BorderLayout(0, 0));
JScrollPane scrollPane = new JScrollPane(buttonContainer);
sideBar.add(scrollPane);
myFrame.getContentPane().add(sideBar, BorderLayout.WEST);
myFrame.getContentPane().add(centerPanel, BorderLayout.CENTER);
myFrame.setLocationByPlatform(true);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.pack();
myFrame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
bạn có thể cung cấp SSCCE? – StanislavL
Đó là một phần của một dự án lớn. Tôi sẽ cố gắng cung cấp một bản trình diễn ngắn gọn về vấn đề này. – dylan202
@StanislavL cho người dùng mới, tôi cho rằng tốt hơn nên liên kết những gì [SSCCE] (http://sscce.org/) là! :) – COD3BOY