第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Java Swing 窗口大小與 AWT 畫布結(jié)果不匹配

Java Swing 窗口大小與 AWT 畫布結(jié)果不匹配

慕村225694 2023-12-13 14:32:15
我想在 JPanel 中繪制一個(gè)具有原始窗口 80% 寬度和 80% 高度的矩形。這是我的駕駛員課程public class driver {    public static void main(String[] args) {        System.out.println("test");        Window myWindow = new Window();        myWindow.add(new GraphPanel());        myWindow.settings();    }}這是我的 JPanel:import javax.swing.*;public class Window extends JFrame {    private static final int width = 1100;    private static final int height = 600;    public void settings(){        setSize(width,height);        setVisible(true);        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        setLocationRelativeTo(null);    }    public static int[] getWindowSize(){        int[] output = new int[]{width, height};        return output;    }}和矩形畫布:import java.awt.*;public class GraphPanel extends Canvas {    public void paint(Graphics g){        setBackground(Color.WHITE);        setForeground(Color.DARK_GRAY);        int[] windowSize = Window.getWindowSize();        //Not working as intented        g.drawRect(windowSize[0]/10, windowSize[1]/10, 8*windowSize[0]/10, 8*windowSize[1]/10);    }}這是結(jié)果,我無法發(fā)布圖像,所以這里有一個(gè)鏈接 https://i.stack.imgur.com/VlQIk.png正如你所看到的,這顯然沒有居中,高度偏離了大約 30 像素,寬度偏離了大約 20 像素。我不知道這是怎么發(fā)生的,所以我的問題是,有誰(shuí)知道這可能是什么原因造成的?
查看完整描述

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 開始


查看完整回答
反對(duì) 回復(fù) 2023-12-13
  • 1 回答
  • 0 關(guān)注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)