На данный момент мое единственное решение - создать прибор, который возвращает словарь приборов.
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, но оно работает для я.
Если у вас есть только одна панель в кадре и ничего больше, попробуйте это:
Возможно, это происходит из-за цикла 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.
Вот альтернатива, использующая пакет.
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();
}
}
pack()
; -1 для неправильного использования setPreferredSize()
.
– trashgod
25 February 2012 в 08:51
getPreferredSize()
3) Что-то еще? Поскольку 1) требует сторонних макетов, это невозможно сделать в ядре J2SE (что может быть или не быть проблемой). 2) Делает предпочтительный размер компонента негибким. Я бы предпочел установить размер так же, как это сделал jtp. +1
– Andrew Thompson
26 February 2012 в 06:29
getPreferredSize()
в смысле, показанном здесь здесь и упомянутом в пуле 1 здесь . Я вижу необъяснимое setPreferredSize()
как потенциально обманчивое в этом контексте. Это зависит от того, что на панели в i>: больше компонентов → setPreferredSize()
плохо; просто живопись → setPreferredSize()
ОК.
– trashgod
26 February 2012 в 06:52
BufferStrategy
), я решил, что у него почти ничего нет, кроме «просто живописи». Однако теперь я думаю об этом, поскольку для «просто живописи» обычно достаточно JComponent
. Также слово «необъяснимое» предполагает, что ответ может быть отредактирован с комментарием кода, чтобы сделать контекст понятным.
– Andrew Thompson
26 February 2012 в 10:48
Это заняло у меня навсегда понять, но на самом деле это самый простой код. Просто создайте родительскую панель и передайте GridLayout, затем добавьте свою дочернюю панель следующим образом.
JPanel parentPanel= new JPanel(new GridLyout());
JPanel childPanel= new JPanel();
parentPanel.add(childPanel);
Если вы хотите заполнить JFrame всем JPanel, вам нужно установитьUndecorated в true, то есть frame.setUndecorated(true);
. Но теперь вам нужно беспокоиться о своем MAXIMIZE & lt; MINIMIZE и CLOSE, в верхнюю правую сторону (операционная система Windows)
BufferStrategy
здесь, для которой вы не используетеpaintComponent
, сначала рисуете материал, а затем перебрасываете буфер с помощьюbs.show()
– flea whale 25 February 2012 в 07:39paintComponent()
. – trashgod 25 February 2012 в 08:53