1 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可能希望首先快速閱讀本文,以便更好地理解為什么當(dāng)前的方法不起作用(按照您期望的方式)。
我要做的第一件事就是改變你的,GraphPanel讓它定義它preferredSize,獨(dú)立于窗口。通過這種方式,您可以將控制權(quán)交給布局管理系統(tǒng)。
接下來,我將使用組件的實(shí)際物理尺寸來進(jìn)行計(jì)算
int width = (int) (getWidth() * 0.8);
int height = (int) (getHeight() * 0.8);
我還建議將setBackground和setBackground移出該paint方法。這將導(dǎo)致新的疼痛循環(huán)發(fā)生,并使事情變得一團(tuán)糟。
public class GraphPanel extends Canvas {
private static final int PREF_WIDTH = 1100;
private static final int PREF_HEIGHT = 600;
public GraphPanel() {
setBackground(Color.WHITE);
setBackground(Color.DARK_GRAY);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(PREF_WIDTH, PREF_HEIGHT);
}
@Override
public void paint(Graphics g) {
super.paint(g);
int width = (int) (getWidth() * 0.8);
int height = (int) (getHeight() * 0.8);
int x = (getWidth() - width) / 2;
int y = (getHeight() - height) / 2;
//Not working as intented
g.drawRect(x, y, width, height);
}
}
然后我會(huì)更新你的Window課程,以便它使用pack而不是setSize. 這會(huì)將窗口“包裝”在內(nèi)容周圍,同時(shí)考慮到框架裝飾。
public class Window extends JFrame {
public void settings() {
pack();
setLocationRelativeTo(null);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
雖然,我質(zhì)疑從 延伸的意義JFrame,但我已經(jīng)進(jìn)入主題了。
說到這里,除非您想要高性能圖形,需要您完全控制繪畫子系統(tǒng),否則我建議從基于 Swing 的組件甚至 JavaFX 開始
添加回答
舉報(bào)