我有一个从JWindow
扩展的框架(因为我想处理我的X和 - 按钮)所以我不希望它被装饰。我的问题是,当我运行应用程序时,我无法拖动窗口 - 它已固定在某个位置。我的代码如下(类我很大,所以我选择了相关部分):
公共类StatisticsMainFrame扩展了JWindow {
public StatisticsMainFrame()
{
bodyPane = new JPanel();
bodyPane.setLayout(new BoxLayout(bodyPane, BoxLayout.X_AXIS));
sideBannerPane = new JPanel(); // program banner
buttonsPane = new JPanel(); // contains buttons
contentPane = new JPanel();
contentPane.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
contentPane.setPreferredSize(new Dimension(500,500));
// contentPane contains some panel for display data
Container container = new Container();
container.setLayout(new BoxLayout(container, BoxLayout.X_AXIS));
container.add(Box.createVerticalGlue());
container.add(sideBannerPane);
container.add(buttonsPane);
container.add(contentPane);
Container cont = new Container();
cont.setLayout(new BoxLayout(cont, BoxLayout.Y_AXIS));
//cont.add(Box.createHorizontalGlue());
//cont.add(custDecorationPane);
cont.add(container);
add(cont);
// Adding Panes
setAlwaysOnTop(true);
//setUndecorated(true);
pack();
}
public static void main(String[] arg)
{
new StatisticsMainFrame().setVisible(true);
}
private CustomFrameDecorationButtons custDecorationPane;
private JPanel bodyPane;
private JPanel contentPane;
private JPanel sideBannerPane;
private JPanel buttonsPane;
// buttonsPane components
private JLabel general_lbl;
private JLabel Diagnosis_lbl;
private JLabel chemotherapy_lbl;
private JLabel radiotherapy_lbl;
private JLabel surgery_lbl;
private JLabel hermonalTherapy_lbl;
private RootButton generalStatistics_btn;
private RootButton statOfAffectedSys_btn;
private RootButton statOfGrade_btn;
private RootButton statOfCombinations_btn;
private RootButton statOfResponses_btn;
private RootButton statOfRadiotherapy_btn;
private RootButton statOfSurgery_btn;
private RootButton statOfHermonaltherapy_btn;
private GeneralStatisticsContentPanel generalStatPane;
private StatisticsOfAffectedSystemPanel2 statOfAffectedSysPanel2;
private StatisticsOfGradePanel statOFGradingPanel;
private ChemotherapyCombinationStatisticsPanel statChemotherapyCombinationPanel;
private ChemotherapyResponseStatisticsPanel statChemotherapyResponsePanel;
private RadiotherapyStatisticsPanel radiotherapyPanel;
private SurgeryStatisticsPanel surgeryStatPanel;
private HermonaltherapyStatisticsPanel hermonaltherapy;
}
答案 0 :(得分:6)
您可以使用以下代码添加自定义拖动:
addMouseMotionListener(new MouseMotionListener() {
private int mx, my;
@Override
public void mouseMoved(MouseEvent e) {
mx = e.getXOnScreen();
my = e.getYOnScreen();
}
@Override
public void mouseDragged(MouseEvent e) {
Point p = StatisticsMainFrame.this.getLocation();
p.x += e.getXOnScreen() - mx;
p.y += e.getYOnScreen() - my;
mx = e.getXOnScreen();
my = e.getYOnScreen();
StatisticsMainFrame.this.setLocation(p);
}
});
如果您将此代码段直接放在StatisticsMainFrame
的构造函数中,则可以使用鼠标通过单击窗口内的任意位置来拖动窗口。 (您也可以将侦听器添加到任何其他组件。)