Путаница в отношении абсолютного позиционирования [дубликат]

На данный момент мое единственное решение - создать прибор, который возвращает словарь приборов.

import pytest
import my_package

@pytest.fixture
def dir1_fixture():
    return '/dir1'

@pytest.fixture
def dir2_fixture():
    return '/dir2'

@pytest.fixture
def dir_fixtures(
    dir1_fixture,
    dir2_fixture
    ):
    return {
        'dir1_fixture': dir1_fixture,
        'dir2_fixture': dir2_fixture
    }

@pytest.mark.parametrize('fixture_name, expected', [('dir1_fixture', 'expected1'), ('dir2_fixture', 'expected2')]
def test_directory_command(dir_fixtures, fixture_name, expected):
    dirname = dir_fixtures[fixture_name]
    result = my_package.directory_command(dirname)
    assert result == expected

Не лучший, поскольку он не использует решение, встроенное в pytest, но оно работает для я.

3
задан flea whale 25 February 2012 в 07:19
поделиться

4 ответа

Если у вас есть только одна панель в кадре и ничего больше, попробуйте это:

  • Установите BorderLayout в кадре.
  • Добавьте панель в рамку с BorderLayout.CENTER

Возможно, это происходит из-за цикла while в JPanel. (Не знаете, почему? нахождение фактической причины. Будет обновляться при поиске.) Если вы замените его на метод paintComponent(g) все работает нормально:

public BSTest() {
    //--- your code as it is
    add(panel, BorderLayout.CENTER);
    //-- removed panel.drawStuff();
}

public class DrawPanel extends JPanel {
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setColor(Color.BLACK);
        System.out.println("W:" + getSize().width + ", H:" + getSize().height);
        g2d.fillRect(0, 0, getSize().width, getSize().height);
    }
 }

//your code as it is.
6
ответ дан Harry Joy 20 August 2018 в 19:11
поделиться
  • 1
    Привет @Harry, я только что попробовал ваше предложение (см. Новые отредактированные строки в коде выше), но он отображает точно то же самое! – flea whale 25 February 2012 в 07:24
  • 2
    @fleawhale: см. мое редактирование. – Harry Joy 25 February 2012 в 07:32
  • 3
    спасибо, но я пытаюсь сделать игру, используя BufferStrategy здесь, для которой вы не используете paintComponent, сначала рисуете материал, а затем перебрасываете буфер с помощью bs.show() – flea whale 25 February 2012 в 07:39
  • 4
    +1 для paintComponent(). – trashgod 25 February 2012 в 08:53

Вот альтернатива, использующая пакет.

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class PackExample extends JFrame {

    public PackExample(){
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(800,600));
        panel.setBackground(Color.green);
        add(panel);
        pack();
        setVisible(true);
   }

   public static void main(String[] args){
     new PackExample();
   }

}
3
ответ дан JTP 20 August 2018 в 19:11
поделиться
  • 1
    +1 для pack(); -1 для неправильного использования setPreferredSize() . – trashgod 25 February 2012 в 08:51
  • 2
    @trashgod DYM 1) Используйте расширенный макет (AKA «метод kleopatra») 2) Override getPreferredSize() 3) Что-то еще? Поскольку 1) требует сторонних макетов, это невозможно сделать в ядре J2SE (что может быть или не быть проблемой). 2) Делает предпочтительный размер компонента негибким. Я бы предпочел установить размер так же, как это сделал jtp. +1 – Andrew Thompson 26 February 2012 в 06:29
  • 3
    @AndrewThompson: Спасибо, что разработали. Я имел в виду 2) переопределить getPreferredSize() в смысле, показанном здесь здесь и упомянутом в пуле 1 здесь . Я вижу необъяснимое setPreferredSize() как потенциально обманчивое в этом контексте. Это зависит от того, что на панели в : больше компонентов → setPreferredSize() плохо; просто живопись → setPreferredSize() ОК. – trashgod 26 February 2012 в 06:52
  • 4
    @trashgod Спасибо за разъяснение. Посмотрев на код OP (и увидев BufferStrategy), я решил, что у него почти ничего нет, кроме «просто живописи». Однако теперь я думаю об этом, поскольку для «просто живописи» обычно достаточно JComponent. Также слово «необъяснимое» предполагает, что ответ может быть отредактирован с комментарием кода, чтобы сделать контекст понятным. – Andrew Thompson 26 February 2012 в 10:48

Это заняло у меня навсегда понять, но на самом деле это самый простой код. Просто создайте родительскую панель и передайте GridLayout, затем добавьте свою дочернюю панель следующим образом.

JPanel parentPanel= new JPanel(new GridLyout());
JPanel childPanel= new JPanel();
parentPanel.add(childPanel);
0
ответ дан kupaff 20 August 2018 в 19:11
поделиться

Если вы хотите заполнить JFrame всем JPanel, вам нужно установитьUndecorated в true, то есть frame.setUndecorated(true);. Но теперь вам нужно беспокоиться о своем MAXIMIZE & lt; MINIMIZE и CLOSE, в верхнюю правую сторону (операционная система Windows)

1
ответ дан nIcE cOw 20 August 2018 в 19:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: