sar*_*alk 12 java swing jpanel jframe jsplitpane
我有一个JFramewith BorderLayout作为布局管理器.
在南边界,我有一个JPanel,我希望这个JPanel尺寸可以由用户调整,即用户可以点击边框的边缘并将其向上拖动以使其更大.
有什么方法你知道我能做到吗?
jjn*_*guy 24
为了使框架中的面板可以单独调整大小,您需要将它们添加到一个JSplitPane.
而不是把它放在框架的南部,放在JSplitPane中心.拆分窗格将使拆分中的底部面板看起来像在南部,并且拆分中的顶部面板将位于框架的中心.
确保使用的方式设置两个面板的方向setOrientation(JSplitPane.VERTICAL_SPLIT ).
然后,您可以调整窗格中的面板的大小.
Sav*_*sis 12
我想你想说JPanel.您可以添加自定义mouseListener并处理鼠标单击,拖动和鼠标释放,然后以programmaticaly方式调整面板大小.
这将证明这一点.请注意,jframe不会使用JPanel自动调整大小.为了使效果更加明显,我将面板涂成红色并添加了斜面边框:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
@SuppressWarnings("serial")
public class ResizablePanel extends JPanel {
private boolean drag = false;
private Point dragLocation = new Point();
public ResizablePanel() {
setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
setPreferredSize(new Dimension(500, 500));
final JFrame f = new JFrame("Test");
addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
drag = true;
dragLocation = e.getPoint();
}
@Override
public void mouseReleased(MouseEvent e) {
drag = false;
}
});
addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
if (drag) {
if (dragLocation.getX()> getWidth()-10 && dragLocation.getY()>getHeight()-10) {
System.err.println("in");
setSize((int)(getWidth()+(e.getPoint().getX()-dragLocation.getX())),
(int)(getHeight()+(e.getPoint().getY()-dragLocation.getY())));
dragLocation = e.getPoint();
}
}
}
});
f.getContentPane().setLayout(new BorderLayout());
f.getContentPane().add(this,BorderLayout.CENTER);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
new ResizablePanel();
}
public void paintComponent(Graphics g) {
g.setColor(Color.red);
g.fillRect(0, 0, getWidth(), getHeight());
}
}
Run Code Online (Sandbox Code Playgroud)