【发布时间】:2013-08-03 08:00:06
【问题描述】:
我有一个扩展的JPanel 类,名为GridPanel。它允许您将图像从JList 拖放到其中。 GridPanel 让您可以用鼠标拖动图像并根据需要重新排列它们。我感兴趣的是制作GridPanel 组件的缩略图。
如果我理解正确,将JScrollPane 的视图设置为GridPanel 会使GridPanel 成为JViewPort 的子级,而JScrollPane 则成为JScrollPane 的子级。目前GridPanel 已经设置为JScrollPane 的视图,我很确定GridPanel 不能有两个父母。所以我不能让两个组件共享同一个视图,但我真的只需要缩略图视图来绘制GridPanel 的缩放视觉副本。
这引出了我的问题。是否可以复制 GridPanel 绘制的内容,但将其绘制在完全独立的组件上?
这是我尝试过的一个例子,以防我不被理解。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class TestMain {
public static void main(String[] a) {
Color[] colors = new Color[]{Color.green, Color.red, Color.blue, Color.yellow};
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationByPlatform(true);
JPanel content = new JPanel();
frame.setContentPane(content);
content.setLayout(new FlowLayout());
//using variable names to try and help relate to my question
final JPanel gridPanel = new JPanel();
gridPanel.setPreferredSize(new Dimension(200,200));
gridPanel.setLayout(new GridLayout(2, 2));
JLabel label;
for (Color c: colors){
label = new JLabel();
label.setOpaque(true);
label.setBackground(c);
gridPanel.add(label);
}
JScrollPane gridScroll = new JScrollPane(gridPanel);
final JScrollPane thumbnailScroll = new JScrollPane();
thumbnailScroll.setPreferredSize(new Dimension(200,200));
JButton tryThumbnailView = new JButton("Activate Thumbnail");
tryThumbnailView.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
thumbnailScroll.setViewportView(gridPanel);
frame.repaint();
}
});
content.add(tryThumbnailView);
content.add(gridScroll);
content.add(thumbnailScroll);
frame.pack();
frame.setVisible(true);
}
}
我希望两个组件都显示同一组彩色JLabels,而不重复那些JLabels。
【问题讨论】:
-
是的,您可以绘制它,但副本不会是交互式的
-
不确定目标。请参阅paintChildren
-
另见相关example。
标签: java swing graphics jscrollpane jviewport