[英]Resizing JPanel
我有一個關於調整JPanel
大小的問題。
我有一個JSlider
,它可以動態調整JPanel
大小。 當我更改JPanel
Height()
值時,面板的大小從上到下減小或增加,起到curtain
,但是當我改變值Width()
,它不影響curtain
作用,面板從Center調整大小,並且同時減少或增加雙方。
親愛的專家,請告訴我如何從左到右或向后調整面板寬度?
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;
}
}
雖然可以按照自己的方式行事,但使用JSplitPane來實現我認為可比的目標要容易得多。
new JSplitPane(JSplitPane.VERTICAL_SPLIT,
componentOnLeft, Component componentOnRight);
如果需要以編程方式調整兩個組件的大小,則JSplitPane
還具有setDividerLocation方法(一個絕對值,一個比例值)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.