मुझे लगता है कि आप जेपीनल कहना चाहते हैं। आप एक कस्टम माउस लिस्टर जोड़ सकते हैं और माउस क्लिक, ड्रैग और माउस रिलीज को नियंत्रित कर सकते हैं और फिर पैनल प्रोग्रामेटिकल का आकार बदल सकते हैं।
यह यह प्रदर्शित करेगा। ध्यान दें कि jframe जेपीनल के साथ स्वचालित रूप से आकार बदल नहीं आता है। प्रभाव अधिक दिखाई मैं पैनल चित्रित लाल और एक beveled सीमा जोड़ा बनाने के लिए:
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());
}
}
स्रोत
2009-07-13 15:07:05
शीर्ष पर रास्ता है कि! एक सरल 'JSplitPane' काम पूरा हो जाएगा। – jjnguy
मुझे पता है। मैंने अभी अपने प्रश्न का उत्तर दिया। –
हालांकि यह एक दिलचस्प समाधान है। – jjnguy