簡體   English   中英

將JPanel放在JScrollPanel中的問題

[英]issues with putting a JPanel in a JScrollPanel

我正在一個項目上工作,我在JPanel上繪制圖像,然后將該面板放在JScrollPane中。 面板本身的尺寸有時會比屏幕小,有時會更大。 較大時,滾動窗格似乎沒有任何滾動條出現。 我敢肯定我搞砸了很簡單的東西,但我似乎無法弄清楚。

任何幫助將不勝感激。

public void createGI(theTicket[] ticketArray){
    JFrame ticketReportFrame = new JFrame();
    ticketReportFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    JPanel ticketReport = new drawTurnoverReport(ticketArray , notes, tapes, turnover);
    ticketReport.setBackground(Color.WHITE);
    ticketReport.setLayout(new BorderLayout());
    JScrollPane ticketReportHolder = new JScrollPane(ticketReport);
    ticketReportFrame.setExtendedState(Frame.MAXIMIZED_BOTH);
    ticketReportFrame.pack();
    ticketReportHolder.setWheelScrollingEnabled(true);
    ticketReportFrame.add(ticketReportHolder);
    ticketReportFrame.setVisible(true);
    ticketReportFrame.setResizable(false);
}

這只是drawTurnoverReport的一小部分,可以嘗試幫助顯示我在做什么。

public class drawTurnoverReport extends JPanel{

   public drawTurnoverReport(theTicket[] tickets, String[] n, String[] t, String[] to){
        ticArray = tickets;
        notes = n;
        tapes = t;
        turnover = to;
        formalDate = mt.formalDate;
    }
    @Override
    protected void paintComponent(Graphics g){
        super.paintComponent( g );
        Graphics2D g2 = (Graphics2D) g;



        //set fonts
        Font tahomaB = new Font("tahoma", Font.BOLD, 15);
        Font tahomaP = new Font("tahoma", Font.PLAIN, 15);

        //draw heading
        g2.setColor(Color.BLACK);
        g2.setFont(tahomaB);
        Rectangle2D rec = g2.getFontMetrics().getStringBounds("Turnover / Activity Log", g2);
        int stringW = (int) rec.getWidth();
        int prevStringH = (int) rec.getHeight();
        g2.drawString("Turnover / Activity Log", x-(stringW / 2) , 50);

        g2.setFont(tahomaP);
        rec = g2.getFontMetrics().getStringBounds("Date: " + formalDate, g2);
        stringW = (int) rec.getWidth();
        verticalPlace = 50 + prevStringH;
        g2.drawString("Date: " + formalDate, x-(stringW / 2) , verticalPlace);
        prevStringH = (int) rec.getHeight();
        verticalPlace += prevStringH;

        g2.setFont(tahomaB);
        rec = g2.getFontMetrics().getStringBounds("Service Manager Tickets", g2);
        stringW = (int) rec.getWidth();
        g2.drawString("Service Manager Tickets", x-(stringW / 2) , verticalPlace);
        verticalPlace +=2;
        g2.drawLine(((int)rec.getMinX()+ x)-(stringW / 2 +2), verticalPlace, 
                ((int)rec.getMaxX()+x)-(stringW / 2), verticalPlace);
        verticalPlace += 40;

        //draw table headers
        verticalUnderHeader = verticalPlace;
        g2.drawLine(50, verticalPlace, w-50, verticalPlace);
        rec = g2.getFontMetrics().getStringBounds(ticArray[0].getTicketNum(), g2);
        stringW = (int) rec.getWidth();
        rec = g2.getFontMetrics().getStringBounds("Ticket #", g2);
        temp = (int) rec.getWidth();
        g2.drawString("Ticket #", ((stringW+65+50)/2-(temp/2)), verticalPlace+17);
        horzPlace = stringW + 65;
        CNCxA = horzPlace;
        rec = g2.getFontMetrics().getStringBounds("Customer Name", g2);
        stringW = (int) rec.getWidth();
        widthCNC = (horzPlace + stringW + 30)-horzPlace;
        g2.drawString("Customer Name", horzPlace + 15, verticalPlace+17);
        horzPlace = horzPlace + stringW + 30;
        CNCxB = horzPlace;
        temp = w-horzPlace+30;
        DCx = temp;
        widthDC = temp - horzPlace;
        rec = g2.getFontMetrics().getStringBounds("Description", g2);
        stringW = (int) rec.getWidth();
        g2.drawString("Description", (horzPlace+temp)/2-(stringW/2), verticalPlace+17);
        rec = g2.getFontMetrics().getStringBounds("Status", g2);
        stringW = (int) rec.getWidth();
        g2.drawString("Status", (temp+(w-50))/2-(stringW/2), verticalPlace+17);
        verticalPlace += 20;
        g2.drawLine(50, verticalPlace, w-50, verticalPlace);
        verticalPlaceTemp = verticalPlace + 20;


    }
}

從事情的聲音來看, drawTurnoverReport組件沒有向滾動窗格提供足夠的大小提示信息。

JScrollPane將使用組件preferredSize來確定是否需要顯示滾動條。

確保覆蓋了getPreferredSize方法,並返回了適當大小的組件。

例如:

假設您正在執行某種自定義繪畫,並且未使用JLabel之類的圖像來渲染圖像,這將暗示您在某處存在布局問題...但是如果沒有drawTurnoverReport的來源,就不可能知道...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM