JFrame ішіндегі белсенді түрде көрсетілетін JPanel теңестіру

Немесе pack() осы JFrame-де жұмыс істемейтінін түсіндіре ала ма?

Бір JPanel ішіне ие (іс жүзінде, JPanel-сыныпты кеңейтетін сынып - inner ).

Мен пайдаланатын код:

inner.setPreferredSize(new Dimension(800, 600));
add(inner);
pack();
setResizable(false);
setLocationRelativeTo(null);//to center the JFrame on screen
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);

Қосымша кеңістік JFrame-ның декорациясының дәл ені мен биіктігі болып көрінеді (яғни, JFrame өлшемдері JPanel өлшемдерінен басқа).

enter image description here

0
setUndecorated (boolean v) өтпесімен әрекеттендіңіз бе?
қосылды автор Jack, көзі
«Мен басқа суретті жібере аламын.» Бұл туралы ойламас бұрын,
қосылды автор Andrew Thompson, көзі
JPanel әдепкі бойынша қос буферлік болып табылады; Мен сізге белсенді түрде көрсету керек екеніне таңғаламын.
қосылды автор trashgod, көзі
Қосымша кеңістік JFrame-дың төменгі және оң жағында сұр түспен көрінеді. Егер контраст тым төмен болса, басқа суретті жібере аламын.
қосылды автор Peter, көзі
Мен безендіруді жалғастырғым келеді. Бірақ сіз любопытны болсаңыз, терезенің өлшемі неғұрлым дәлірек (бірақ, әдетте, бірнеше пиксель арқылы өлшенемін).
қосылды автор Peter, көзі
@AndrewThompson Мен берген скриншотпен қате нәрсе бар ма?
қосылды автор Peter, көзі
Шешім үшін менің жауабымды қараңыз. Мәселе екі буферлі белсенді рендерингпен болды және пакетті емес ().
қосылды автор Peter, көзі
Мен агенттің модельдеуімен жұмыс істеймін, сондықтан ол өте қымбатқа түседі.
қосылды автор Peter, көзі

2 жауаптар

pack() setResizable (жалған) дейін шақырыңыз. «Қосымша кеңістік JFrame -нің декорациясының дәл ені мен биіктігі сияқты көрінеді».

Қосымша: Міне, менің бастапқы болжамым дұрыс емес екенін көрсететін sscce .

enter image description here

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;

/** @see http://stackoverflow.com/questions/7924830 */
public class NonResizable extends JPanel {

    public NonResizable() {
        this.setPreferredSize(new Dimension(400, 300));
        this.setBackground(Color.lightGray);
        this.setBorder(BorderFactory.createLineBorder(Color.blue));
    }

    private void display() {
        JFrame f = new JFrame("NonResizable");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new FlowLayout());
        f.setBackground(Color.white);
        f.add(this);
        f.pack();
        f.setResizable(false);
        f.setLocationRelativeTo(null);
        f.setSize(500, 400);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new NonResizable().display();
            }
        });
    }
}
3
қосылды
шынымен дұрыс емес мәселе, +1
қосылды автор mKorbel, көзі
Егер бұл көмектеспесе, сипатталған мәселені көрсететін sscce көрсетіңіз.
қосылды автор trashgod, көзі
Менің алғашқы болжамым қате болды; Жоғарыда мысал келтірдім.
қосылды автор trashgod, көзі
Кейбір кеңістікті жояды, бірақ бәрі емес. Мен бірлесіп жұмыс істеуге тырысамын.
қосылды автор Peter, көзі

JPanel емес, JFrame-дан сызба (белсенді көрсету) болдым ... сондықтан қосымша кеңістік JPanel's draw() нысанын 0,0 (JFrame-та) деңгейінде теңестірді.

Бұл хабарламаны шешілген.

0
қосылды