0

サイズ直しについて質問JPanelです。

私は動的JSliderにサイズを変更するを持っていJPanelます。の値Height()を変更するとJPanel、パネルのサイズが上から下に減少または増加し、 のように効果がcurtainありますが、値を変更Width()しても効果はなくcurtain、パネルは中央からサイズ変更され、両側で同時に減少または増加します時間。

専門家の皆様、パネルの幅を左から右、または後ろにサイズ変更する方法を教えてください。

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JToolBar;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;


public class Swipe extends JFrame {

    static JPanel panel = null;
    static JPanel panel2 = null;
    static JPanel panel3 = null;
    static JLabel label1 = null;
    static JLabel label2 = null;
    static JSlider slider = null;
    static JToolBar bar = null;
    ImageIcon img;

    public Swipe(ImageIcon img1, ImageIcon img2) {
        JFrame frame = new JFrame();
        bar = new JToolBar();
        bar.add(slider(img1));
        frame.add(bar, BorderLayout.NORTH);
        label1 = new JLabel();
        label1.setLayout(null);
        label1.setMaximumSize(new Dimension(img2.getIconWidth(), img2.getIconHeight()));
        label1.setIcon(img1);

        panel = new JPanel();
        panel.add(label1, new GridBagConstraints());

        label2 = new JLabel();
        label2.setPreferredSize(new Dimension(img2.getIconWidth(), img2.getIconHeight() + 20));
        label2.setMaximumSize(new Dimension(img2.getIconWidth(), img2.getIconHeight()));
        label2.setIcon(img2);
        frame.setLayout(new FlowLayout());
        label2.setLayout(new FlowLayout());
        label2.add(panel);
        frame.add(label2);
        frame.setSize(img2.getIconWidth() + 50, img2.getIconHeight() + 50);
        frame.setVisible(true);
        frame.pack();
    }

    public JSlider slider(final ImageIcon im) {
        slider = new JSlider();
        slider.setMaximum(im.getIconHeight());
        slider.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                // TODO Auto-generated method stub
                int value = slider.getValue();
                //panel.setPreferredSize(new Dimension(im.getIconWidth(),value));
                panel.setPreferredSize(new Dimension(value, im.getIconHeight()));
                panel.repaint();
                panel.updateUI();
            }
        });
        return slider;
    }
}
4

1 に答える 1

1

あなたのやり方で行うことは確かに可能ですが、JSplitPaneを使用して同等の目標を達成する方がはるかに簡単で簡単です。

new JSplitPane(JSplitPane.VERTICAL_SPLIT, 
  componentOnLeft, Component componentOnRight);

JSplitPaneプログラムで 2 つのコンポーネントのサイズを変更する必要がある場合は、setDividerLocationメソッド (1 つは絶対、もう 1 つは比例) もあります。

于 2013-06-18T06:50:45.467 に答える