幾件事情需要注意:
您只需要兩個面板一個鼠標處理程序。由於這可能會不必要地使工具欄中的事件處理複雜化,我會讓操作系統進行裝飾。
您應該本地化您的背景圖。
您可以根據需要使用setPreferredSize()
並覆蓋getPreferredSize()
。
你main()
方法應該建立在GUI「on the event dispatch thread.」
的JFrame
的默認佈局是BorderLayout
一個組件之間沒有空隙。
下面是提出了一些原則的例子:
public class WelcomeWindow extends JFrame {
private ToolPanel top = new ToolPanel("/guiresources/BgTop.png");
private PaperPanel middle = new PaperPanel("/guiresources/BgPaper.png");
private ToolPanel bottom = new ToolPanel("/guiresources/BgBottom.png");
public WelcomeWindow() throws IOException {
initComponents();
}
private void initComponents() throws IOException {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setUndecorated(true);
middle.setPreferredSize(new Dimension(640, 480));
this.add(top, BorderLayout.NORTH);
this.add(middle, BorderLayout.CENTER);
this.add(bottom, BorderLayout.SOUTH);
MouseHandler mouseHandler = new MouseHandler();
top.addMouseListener(mouseHandler);
top.addMouseMotionListener(mouseHandler);
bottom.addMouseListener(mouseHandler);
bottom.addMouseMotionListener(mouseHandler);
this.pack();
this.setLocationRelativeTo(null);
}
private class MouseHandler extends MouseAdapter {
private Point point = new Point();
@Override
public void mousePressed(MouseEvent e) {
point.x = e.getX();
point.y = e.getY();
}
@Override
public void mouseDragged(MouseEvent e) {
Point p = getLocation();
setLocation(p.x + e.getX() - point.x, p.y + e.getY() - point.y);
}
}
}
class PaperPanel extends JPanel {
protected Image image;
PaperPanel(String name) {
try {
image = ImageIO.read(getClass().getResource(name));
} catch (IOException ex) {
ex.printStackTrace(System.err);
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
}
}
class ToolPanel extends PaperPanel {
ToolPanel(String name) {
super(name);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(image.getWidth(null), image.getHeight(null));
}
}
對不起,學習曲線實在太高,以幫助你在這裏。如果您修改了您的問題以包含您嘗試或檢查的內容列表,那麼您可能會獲得更多訪問者。你在使用佈局管理器嗎?如果是這樣,哪一個?你檢查過每個組件的界限嗎?那次測試的結果是什麼?等等。 – 2010-12-05 15:55:06
您的gui是使用GUI構建器創建的。你將需要很多運氣和時間來修改它。更好的做法是從頭開始構建您的GUI,讓您更好地控制其創建。 – 2010-12-05 16:10:14