という拡張JPanel
クラスがありGridPanel
ます。から画像をドラッグ アンド ドロップできますJList
。では、GridPanel
マウスで画像をドラッグして、必要に応じて並べ替えることができます。私が興味を持っているのは、GridPanel
コンポーネントのサムネイル ビューを作成することです。
私の理解が正しければ、JScrollPane
のビューを に設定GridPanel
すると、 のGridPanel
子JViewPort
になり、 の子になりJScrollPane
ます。現在GridPanel
、すでに のビューになるように設定されており、2 つの親を持つことはできないとJScrollPane
確信しています。GridPanel
したがって、2 つのコンポーネントで同じビューを共有することはできませんが、縮小された のビジュアル コピーをペイントするために必要なのはサムネイル ビューだけです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
。